Reputation: 183
I created the following function with NodeMailer which seems to be despatching emails without problems ("Message sent" notification in console and email received) except there are no attachments with any emails sent!
Tried it with a bunch of email addresses (gmail, google apps, hotmail) but all are doing the same thing. Please help!
var sendWithAttachment = function(userMail, subject, html, attachment_path, cb){
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "[email protected]",
pass: "password"
}
});
var mailOptions = {
from: "Labs <[email protected]>",
to: userMail,
subject: subject || "[blank]"
html: html || "[none]"
generateTextFromHTML: true,
attachments: [
{ // filename and content type is derived from path
path: attachment_path
},
{ // utf-8 string as an attachment
filename: 'check.txt',
content: 'checking that some attachments work...'
},
],
};
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
cb(error, null);
}else{
console.log("Message sent: " + response.message);
cb(null, response);
}
smtpTransport.close();
});
};
Upvotes: 6
Views: 7172
Reputation: 774
// simple code by nodemailer to send an email with attachment
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "[email protected]",
pass: "passport"
}
});
fs.readFile("path/logfile.txt", function (err, data) {
//creating simple built-in templating
var templateSender = {
from: 'MK <[email protected]>', // sender address
to: '[email protected]', // list of receivers
subject: "Attachment", // Subject line
body: 'mail content...',
attachments: [{ filepath: 'path/logfile.txt', filename: 'logfile.txt', contents: data}]
};
// send mail with defined transport object
smtpTransport.sendMail(templateSender, function(error, success){
if(error){
return console.log(error);
}
smtpTransport.close();
});
});
Upvotes: 1
Reputation: 759
It an issue in nodemailer's docs. Changing 'path' with 'filePath' to define path and change 'content' to 'contents' for text. Worked for me.
var mailOptions = {
...
attachments: [
{ // utf-8 string as an attachment
filename: 'text1.txt',
contents: 'hello world!'
},
{ // utf-8 string as an attachment
filename: 'text1.txt',
filePath: 'text.txt'
},
]
}
Upvotes: 11
Reputation: 1956
var mailOptions = {
...
attachments: [
{ // utf-8 string as an attachment
filename: 'text1.txt',
content: 'hello world!'
},
{ // binary buffer as an attachment
filename: 'text2.txt',
content: new Buffer('hello world!','utf-8')
},
{ // file on disk as an attachment
filename: 'text3.txt',
path: '/path/to/file.txt' // stream this file
},
{ // filename and content type is derived from path
path: '/path/to/file.txt'
},
{ // stream as an attachment
filename: 'text4.txt',
content: fs.createReadStream('file.txt')
},
{ // define custom content type for the attachment
filename: 'text.bin',
content: 'hello world!',
contentType: 'text/plain'
},
{ // use URL as an attachment
filename: 'license.txt',
path: 'https://raw.github.com/andris9/Nodemailer/master/LICENSE'
},
{ // encoded string as an attachment
filename: 'text1.txt',
content: 'aGVsbG8gd29ybGQh',
encoding: 'base64'
},
{ // data uri as an attachment
path: 'data:text/plain;base64,aGVsbG8gd29ybGQ='
}
]
}
Upvotes: 1
Reputation: 2398
I resolved this issue by renaming content
to contents
. I was reading the most up-to-date docs for a newer version of nodemailer
. You can read the docs for versions less than 1.0 here: https://github.com/andris9/Nodemailer/blob/0.7/README.md
Upvotes: 4