socratic_singh
socratic_singh

Reputation: 183

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();
  });
};

Upvotes: 6

Views: 7172

Answers (4)

Maryam Koulaei
Maryam Koulaei

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

Kazim Homayee
Kazim Homayee

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

Jijo Paulose
Jijo Paulose

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

Clint Powell
Clint Powell

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

Related Questions