ChinaPaul ChinaPaul -5 years ago 470
Node.js Question

Node.js sending an email with image attachment using nodemailer

I'm trying to send an email from a post request. I'm using Express and nodemailer. I'm confused by 'fs' My email is getting sent but the image is not included as an attachment. I checked the docs but they all seem to send up static files not files being streamed in from a form request.

var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "",
pass: "password_for_gmail_address"

app.get('/', function(req, res){
res.send('<form method="post" enctype="multipart/form-data">'
+ '<p>Post Title: <input type="text" name="title"/></p>'
+ '<p>Post Content: <input type="text" name="content"/></p>'
+ '<p>Image: <input type="file" name="image"/></p>'
+ '<p><input type="submit" value="Upload"/></p>'
+ '</form>');
})'/', function(req, res, next){
var mailOptions = {
from: "", // sender address
to: "", // list of receivers
subject: req.body.title, // Subject line
text: req.body.content, // plaintext body
fileName: req.body.title,
streamSource: req.files.image

smtpTransport.sendMail(mailOptions, function(error, response){
console.log("Message sent: " + response.message);

Answer Source

Assuming req.files.image is a File object, not a readable stream, you'd need to create a read stream for it that you can use in the attachment:

streamSource: fs.createReadStream(req.files.image.path)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download