Отправка писем с вложениями через NodeJS - PullRequest
21 голосов
/ 12 января 2011

Есть ли библиотека для NodeJS для отправки писем с вложениями?

Ответы [ 12 ]

48 голосов
/ 13 марта 2012

Да, это довольно просто, я использую nodemailer: npm install nodemailer --save

var mailer = require('nodemailer');
mailer.SMTP = {
    host: 'host.com', 
    port:587,
    use_authentication: true, 
    user: 'you@example.com', 
    pass: 'xxxxxx'
};

Затем прочитайте файл и отправьте электронное письмо:

fs.readFile("./attachment.txt", function (err, data) {

    mailer.send_mail({       
        sender: 'sender@sender.com',
        to: 'dest@dest.com',
        subject: 'Attachment!',
        body: 'mail content...',
        attachments: [{'filename': 'attachment.txt', 'content': data}]
    }), function(err, success) {
        if (err) {
            // Handle error
        }

    }
});
4 голосов
/ 31 июля 2012

Попробуйте с помощью nodemailer, например, попробуйте следующее:

  var nodemailer = require('nodemailer');
  nodemailer.SMTP = {
     host: 'mail.yourmail.com',
     port: 25,
     use_authentication: true,
     user: 'info@youdomain.com',
     pass: 'somepasswd'
   };

  var message = {   
        sender: "sender@domain.com",    
        to:'somemail@somedomain.com',   
        subject: '',    
        html: '<h1>test</h1>',  
        attachments: [  
        {   
            filename: "somepicture.jpg",    
            contents: new Buffer(data, 'base64'),   
            cid: cid    
        }   
        ]   
    };

наконец, отправьте сообщение

    nodemailer.send_mail(message,   
      function(err) {   
        if (!err) { 
            console.log('Email send ...');
        } else console.log(sys.inspect(err));       
    });
3 голосов
/ 06 ноября 2011

Лично я использую Amazon SES rest API или Sendgrid rest API, который является наиболее последовательным способом сделать это.

Если вам нужен подход низкого уровня, используйтеhttps://github.com/Marak/node_mailer и настройте свой собственный SMTP-сервер (или тот, к которому у вас есть доступ)

http://blog.nodejitsu.com/sending-emails-in-node

3 голосов
/ 29 марта 2011

Вы пробовали Nodemailer ?

Nodemailer поддерживает

  • Unicode для использования любых символов
  • HTML-содержимого, а такжепростой текстовый вариант
  • Вложения
  • Встроенные изображения в формате HTML
  • SSL (но не STARTTLS)
1 голос
/ 28 января 2016

Еще одна альтернативная библиотека, которую можно попробовать - emailjs .

Я сам попробовал некоторые из предложенных здесь советов, но, запустив код, пожаловался, что send_mail () и sendMail () не определены (хотя я просто копирую и вставляю код с небольшими изменениями).Я использую узел 0.12.4 и npm 2.10.1.У меня не было проблем с emailjs, которые просто работали для меня.И у него есть хорошая оболочка для вложений, так что вы можете прикрепить его различными способами по своему вкусу и легко, по сравнению с примерами nodemailer здесь.

1 голос
/ 13 декабря 2012

используйте почтовый пакет, он очень гибкий и простой.

1 голос
/ 05 мая 2012

Вы также можете использовать библиотеку Amazon SES AwsSum:

Там есть операция под названием SendEmail и SendRawEmail, последняя из которых можетотправлять вложения через сервис.

1 голос
/ 12 января 2011

Вы можете использовать nodejs-phpmailer

0 голосов
/ 15 апреля 2017

вы можете использовать официальный API Google для этого. Для этого они предоставили пакет для узла. Google Официальный API

Я вложил часть своего кода, которая сделала для меня вещь вложения

function makeBody(subject, message) {
var boundary = "__myapp__";
var nl = "\n";
var attach = new Buffer(fs.readFileSync(__dirname + "/../"+fileName)) .toString("base64");
// console.dir(attach);
var str = [

        "MIME-Version: 1.0",
        "Content-Transfer-Encoding: 7bit",
        "to: " + receiverId,
        "subject: " + subject,
        "Content-Type: multipart/alternate; boundary=" + boundary + nl,
        "--" + boundary,
        "Content-Type: text/plain; charset=UTF-8",
        "Content-Transfer-Encoding: 7bit" + nl,
        message+ nl,
        "--" + boundary,
        "--" + boundary,
        "Content-Type: Application/pdf; name=myPdf.pdf",
        'Content-Disposition: attachment; filename=myPdf.pdf',
        "Content-Transfer-Encoding: base64" + nl,
        attach,
        "--" + boundary + "--"

    ].join("\n");

    var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');
    return encodedMail;
}

P.S спасибо himanshu за его интенсивное исследование этого

0 голосов
/ 03 ноября 2016

Отправить с экспресс-почтой (https://www.npmjs.com/package/express-mailer)

Отправить PDF ->

var pdf="data:application/pdf;base64,JVBERi0xLjM..etc"

attachments: [  {  filename: 'archive.pdf',
                  contents: new Buffer(pdf.replace(/^data:application\/(pdf);base64,/,''), 'base64')
                 }   
             ]

Отправить изображение ->

var img = 'data:image/jpeg;base64,/9j/4AAQ...etc'
attachments: [  
             {  
               filename: 'myImage.jpg',
               contents: new Buffer(img.replace(/^data:image\/(png|gif|jpeg);base64,/,''), 'base64')
               }   
             ]

Отправить текст ->

attachments: [  
             {  
               filename: 'Hello.txt',
               contents: 'hello world!'
               }   
             ]
...