قبل از همه بگم که چرا تو نود.جیاس مثل php یه متد mail برای ارسال ایمیل ساخته نشده. تا خیلی راحت بدون هیچ دردسری صداش بکنی و خودش ایمیل رو برات بفرسته. بدون نیاز به کانفیگ خاصی. جواب توی software stack هست.
استک نرمافزار توی نود.جیاس خیلی سبکه. خب استک نرم افزار دیگه چیه؟ همهی اجزایی که به صورت پیشفرض توی یه نرمافزار قرار دارن و با همدیگه کار میکنن. به زبون نود.جیاسی بخوام بگم، میگم اونجایی که npm install میزنی جزء استک نرمافزار نمیشه. بلکه همه ماژول ها و قابلیت های built-in نود.جیاس جزء استک یه نرمافزار نود.جیاسی هست.
در حالی که استک php خیلی بزرگ و سنگینه. اون سروری که روش برنامه php خودتو روش اجرا میکنی شامل اجزای زیادی هست.
اون کاری که php برای ارسال یه ایمیل انجام میده چیه؟ میاد محتوای ایمیلی که باید ارسال بشه رو پردازش میکنه و اونو به stdin (جریان استاندارد ورودی) sendmail میده. که همین کار رو ما با ماژول nodemailer میتونیم انجام بدیم.
تنها تفاوتشون اینه که تو php میای تنظیمات ارسال ایمیل رو توی فایل php.ini انجام میدی ولی اینجا تو تنظیمات خود Nodemailer. ولی اگه sendmail نصب نباشه روی سروری که روش نود.جیاس رو اجرا کردی به مشکل میخوری.
به همین خاطر بهتره از سرویس های SMTP استفاده بکنی.
برای استفاده از nodemailer باید یا از یه SMTP استفاده بکنی یا از روش های دیگه transport کردن استفاده بکنی. اصلا این transport چیه؟
یه آبجکته که به عنوان آرگومان به متد `nodemailer.createTransport` پاس میدی. توی این آبجکت به سری پراپرتی و متد داری. در ادامه با transport بیشتر آشنا میشی.
این آبجکت میاد مشخص میکنه که ایمیل رو چجوری باید ارسال بکنه. از طریق چه پورتی، با چه یوز و پسوردی و ... .
روش اول برای ارسال ایمیل اینه که sendmail رو توی لینوکس نصب بکنی و ssl رو هم اوکی بکنی (با یه چیزی مثل letsencrypt) و بعد برای اینکه بتونی یه ایمیل از طریق nodemailer بفرستی باید همچین کدی بزنی:
let transporter = nodemailer.createTransport({ sendMail: true, newline: 'unix', path: '/usr/sbin/sendmail' }); transporter.sendMail({ from: 'node.js.developers.kh@gmail.com', to: 'you.developers.kh@gmail.com', subject: 'please attention.', text: 'we use sendmail.' }, (error, info) => { if (error) console.error(error); else console.log(info); });
یا اینکه اگه یه mailserver داری، میتونی ازش استفاده بکنی:
let transport = { host: MAIL_HOST, port: MAIL_PORT, secure: false, auth: { user: MAIL_USERNAME, pass: NODE_PASSWORD } }; let transporter = nodemailer.createTransport(this.transport); // transporter.sendMail({ 'from', 'to', 'subject', 'html' }, (error, info) => { /*...*/ })
به همین سادگی به همین تمیزی. دیگه نیاز ندارید کار شاخی بکنید. در ضمن اگه هم قصد استفاده از gmail دارید بهتون بگم که داک خود nodemailer گفته استفاده کردی ارور داد یا کار نکرد برو سراغ smtp.