I'm using a nodemailer to send a mail. Now I want to that the user be able to send an attachment (image with the email. I have tried several ways but nothing worked for me. Even looking here but still hard to figure out how it works. So any help would be great.
So here is my contactPage form
<form onsubmit="return phonenumberValidation()" method="POST" action="send">
<p>
<label>Naam</label>
<input type="text" name="name" required>
</p>
<p>
<label>Organisatie</label>
<input type="text" name="company">
</p>
<p>
<label>Email</label>
<input type="email" name="email" required >
</p>
<p>
<label>Telefoonnummer</label>
<input type="text" name="phone" id="phone" value="">
<span id="messages"></span>
</p>
<p class="full">
<label>Bericht</label>
<textarea name="message" rows="5" required></textarea>
</p>
<p class="full">
<input type="file" name="image" id="image" class="form-control">
</p>
<p class="full">
<input type="submit" value="Submit">
</p>
</form>
And here is my code
app.post('/send', (req, res) =>{
const output = `
<p> You have a new contact request</p>
<h3>Contact Details</h3>
<ul>
<li>Name: ${req.body.name}</li>
<li>Company: ${req.body.company}</li>
<li>Email: ${req.body.email}</li>
<li>Phone: ${req.body.phone}</li>
<li>Image: ${req.body.image}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: 'host',
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: 'user', // generated ethereal user
pass: 'password', // generated ethereal password
},
tls: {
rejectUnauthorized: false
}
});
// send mail with defined transport object
let mailOptions = {
from: '"Fred Foo " <email of sender>', // sender address
to: 'email', // list of receivers
subject: 'Test ✔', // Subject line
text: 'Hello world?', // plain text body
html: output, // html body
image: req.body.image,
attachtements: [
{
fileName: req.body.title+".jpg",
streamSource: fs.createReadStream(req.files.image.path)
}
]
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log("Message sent: %s", info.messageId);
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
});
res.render('contactPage', {
message: 'We hebben uw aanvraag ontvangen en we zullen u binnen twee werkdagen beantwoorden'
});
Iam getting the following error as wel
TypeError: Cannot read property 'image' of undefined
at app.post (C:\Users\w_ema\MTaarten\app.js:149:49)
at Layer.handle [as handle_request] (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:275:10)
at SessionStrategy.strategy.pass (C:\Users\w_ema\MTaarten\node_modules\passport\lib\middleware\authenticate.js:343:9)
at SessionStrategy.authenticate (C:\Users\w_ema\MTaarten\node_modules\passport\lib\strategies\session.js:75:10)