Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NodeMailer attachments not sending with smtp/gmail

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();
  });
};
like image 968
socratic_singh Avatar asked Oct 07 '14 07:10

socratic_singh


3 Answers

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'
        },
    ]
}
like image 51
Kazim Homayee Avatar answered Oct 19 '22 15:10

Kazim Homayee


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

like image 39
Clint Powell Avatar answered Oct 19 '22 16:10

Clint Powell


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='
        }
    ]
}
like image 1
Jijo Paulose Avatar answered Oct 19 '22 16:10

Jijo Paulose