ΠΠΊΠ»ΡΡΠΈΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
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);
});
ΠΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ?
Π― ΡΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ 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-ΡΠ°ΠΉΠ».
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΡΠΈΠ» ΡΡΠΎ? ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΡΠΈΠ²Π΅Ρ, Ρ ΡΠ΅ΡΠΈΠ» ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΠ»ΡΠ΅ Π₯Π°Π΄ΡΠΊΠΈΠ½Ρ
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. ΠΠΎΠ³Ρ Π»ΠΈ Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΡΡΠ³ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅? Π Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ Π΄Π°ΠΆΠ΅ Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡ txt-ΡΠ°ΠΉΠ», Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, nodemailer ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ txt-ΡΠ°ΠΉΠ» Π½Π° ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π½ΠΎ ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΡΡΠΎΠΉ txt-ΡΠ°ΠΉΠ».