Nodemailer: Как ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ pdf с url

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 14 Π°ΠΏΡ€. 2016  Β·  11ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: nodemailer/nodemailer

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² свою ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

1) Nodemailer вСрсии v2.3.2
2) Node.js вСрсии v4.4.2
3) ОБ Windows 8.1
4) Π˜Ρ‚Π°ΠΊ, я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» письмо, Π½ΠΎ с ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ pdf.
НиТС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ сцСнария, Π½ΠΎ Π²Π°ΠΌ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ SMTP. Π€Π°ΠΉΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° PDF являСтся общСдоступным Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠšΠžΠ”

var nodemailer = require('nodemailer');
// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport({
    pool: true,
    host: 'mail.test.hr',
    port: 25 ,
    ignoreTLS: true,
    secure: false,
    logger: true, // log to console
    debug: true // include SMTP traffic in the logs
}, {
    // default message fields
    // sender info
    from: 'test <[email protected]>',
    headers: {
        'X-Laziness-level': 1000 // just an example header, no need to use this
    }
});
// setup e-mail data with unicode symbols
var mailOptions = {
        from: '"test" <[email protected]>', // sender address
    to: '[email protected]', // list of receivers
    subject: 'Hello', // Subject line
    text: 'Hello world', // plaintext body
    attachments: [{
        filename:'GlasIstre.pdf', 
                contentType: 'application/pdf',
        path: 'http://files.glasistre.hr/GlasIstre.pdf'
    }]
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
    if(error){
        return console.log(error);
    }
    console.log('Message sent: ' + info.response);
});

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅? И я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ я ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽ txt-Ρ„Π°ΠΉΠ», Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, nodemailer ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ txt-Ρ„Π°ΠΉΠ» Π½Π° ΠΌΠΎΠ΅ΠΌ сСрвСрС, Π½ΠΎ ΠΎΠ½ просто отправляСт пустой txt-Ρ„Π°ΠΉΠ».

ВсС 11 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠšΡ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ?

Π― смог ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ влоТСния PDF. Π€Π°ΠΉΠ» довольно большой, поэтому я Π±Ρ‹ посовСтовал Π²Π°ΠΌ Π½Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· URL-адрСса, Π° сначала ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» с диска.

НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ источник ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, насколько сообщСниС ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΎ?

ΠŸΡ€Π°Π²Π΄Π°, ΠΊΠΎΠ³Π΄Π° я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ сохранил PDF-Ρ„Π°ΠΉΠ» Π½Π° диск ΠΈ запустил ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ скрипт (использовался присоСдинСниС ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» с диска), я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ PDF-Ρ„Π°ΠΉΠ». Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» слишком большим, поэтому я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° URL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ path: 'url', Π½ΠΎ снова я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» pdf.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΉ исходный ΠΊΠΎΠ΄ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΎΡ‡Π΅Π½ΡŒ малСньким Ρ„Π°ΠΉΠ»ΠΎΠΌ http://www.axmag.com/download/pdfurl-guide.pdf
ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» находится Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
pdfurl-guide.pdf

ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» прСдставляСт собой ΠΎΡ‚Π²Π΅Ρ‚ прокси-сСрвСра Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML. Nodemailer Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ URL-адрСсов Ρ‡Π΅Ρ€Π΅Π· прокси-сСрвСры, поэтому Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ локально PDF. Π₯отя PDF-Ρ„Π°ΠΉΠ» отобраТаСтся Π² элСктронном письмС, ΠΎΠ½ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ (хотя PDF-Ρ„Π°ΠΉΠ» открываСтся Π² локальной систСмС).

  attachments: 
   [ { filename: 'Random.pdf',
       contentType: 'application/pdf',
       path: 'assets/stickers/pdf/upch25-Jul-20160.pdf' } ] }

Π‘ΠΎ ΠΌΠ½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚! Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ PDF-Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π² Π²ΠΈΠ΄Π΅ влоТСния доставляСтся ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌ.
Π― ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» содСрТимоС Ρ„Π°ΠΉΠ»Π° - Π½ΠΈ ошибки, Π½ΠΈ тСкста.

Для мСня это всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ описано Π² @vdraceil .

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅? И я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ я ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽ txt-Ρ„Π°ΠΉΠ», Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, nodemailer ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ txt-Ρ„Π°ΠΉΠ» Π½Π° ΠΌΠΎΠ΅ΠΌ сСрвСрС, Π½ΠΎ ΠΎΠ½ просто отправляСт пустой txt-Ρ„Π°ΠΉΠ».

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ€Π΅ΡˆΠΈΠ» это? Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Ρ€Π΅ΡˆΠΈΠ» это Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ благодаря ИльС Π₯Π°Π΄Ρ‹ΠΊΠΈΠ½Ρƒ

https://stackoverflow.com/questions/34077507/how-can-i-attach-an-image-to-an-email-from-an-url-using-nodemailer-and-request-m/34095094#34095094

var PassThrough = require('stream').PassThrough;
var nameOfAttachment = 'screenshot.png';
var imageUrlStream = new PassThrough();
request
     .get({
             proxy: 'http://YOUR_DOMAIN_NAME:3129', // if needed
             url: opts.imageUrl
         })
     .on('error', function(err) {
             // I should consider adding additional logic for handling errors here
             console.log(err);
    })
     .pipe(imageUrlStream);

var mailOptions = {
    from: opts.from, // sender address
    to: opts.to, // list of receivers
    subject: opts.subject, // Subject line
    html: opts.body, // html body
    attachments: [
        {
            filename: nameOfAttachment,
            content: imageUrlStream
       }
   ]
   };

Π² ΠΌΠΎΠ΅ΠΌ случаС я отправлял Ρ„Π°ΠΉΠ» Excel

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ josco007,

Π― использовал ваш ΠΊΠΎΠ΄, Π½ΠΎ Π½Π΅ использовал прокси. Π’Ρ‹Π²ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ удался ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ. ДСйствиС Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ CORS. ΠœΠΎΠ³Ρƒ Π»ΠΈ я Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ?

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ