متن خبر

ارسال ایمیل با استفاده از Node.js

ارسال ایمیل با استفاده از Node.js

شناسهٔ خبر: 463404 -




اکثر برنامه های کاربردی وب نیاز به ارسال ایمیل دارند. ممکن است برای ثبت نام، بازنشانی رمز عبور، گزارش وضعیت، البته برای کمپین های بازاریابی کامل مانند خبرنامه ها و تبلیغات باشد. این آموزش نحوه ارسال ایمیل در Node.js را توضیح می دهد، اما مفاهیم و چالش ها برای هر سیستمی که استفاده می کنید اعمال می شود.

ماژول های مرتبط با ایمیل در npm فراوانی پیدا خواهید کرد. محبوب ترین NodeMailer است که هر هفته بیش از سه میلیون دانلود دریافت می کند.

برای استفاده از آن، به یک سرور SMTP نیاز دارید که بتواند ایمیل ارسال کند. ممکن است بتوانید از ارائه دهنده ایمیل خود استفاده کنید، اما برای اهداف این نمایش، من از سرور رایگان WPOven Test SMTP استفاده می کنم.

یک پوشه پروژه جدید ایجاد کنید:

 mkdir emailtest cd emailtest

سپس یک فایل package.json جدید با محتوای JSON زیر ایجاد کنید:

 { "name" : "emailtest" , "type" : "module" , "main" : "index.js" , "dependencies" : { "nodemailer" : "^6.0.0" } }

ماژول ها (NodeMailer) را نصب کنید:

 npm install

و کد index.js زیر را ایجاد کنید:

 import nodemailer from 'nodemailer' ; const transporter = nodemailer . createTransport ( { host : 'smtp.freesmtpservers.com' , port : 25 } ) ; try { const send = await transporter . sendMail ( { from : '"Test Email" <test@email.com>' , to : 'someone@example.com' , subject : 'Hello!' , text : 'Hello world!' , html : '<p>Hello world!</p>' , } ) ; console . dir ( send , { depth : null , color : true } ) ; } catch ( e ) { console . dir ( e , { depth : null , color : true } ) ; }

(در نظر بگیرید که آدرس to: به یک آدرس منحصر به فرد تغییر دهید تا بتوانید ایمیل های آزمایشی خود را تحلیل کنید!)

کد را اجرا کنید. شما باید یک نتیجه با یک response 250 OK و یک messageId ببینید:

 $ node index.js { accepted: [ 'someone@example.com' ] , rejected: [ ] , ehlo: [ 'SIZE 33554432' , '8BITMIME' , 'SMTPUTF8' , 'HELP' ] , envelopeTime: 486 , messageTime: 289 , messageSize: 595 , response: '250 OK' , envelope: { from: 'test@email.com' , to: [ 'someone@example.com' ] } , messageId: '<4673597e-a9e4-e422-85f7-4422edf31774@email.com>' }

با وارد کردن آن در صفحه WPOven Test SMTP Server و کلیک کردن روی Access Inbox ، صندوق ورودی آدرس to: را که استفاده کرده‌اید، تحلیل کنید. روی "سلام!" کلیک کنید برای تحلیل مطالب پیام دهید

مبانی NodeMailer

برای ارسال ایمیل، باید یک شی انتقال دهنده NodeMailer برای تعریف نوع سرویس ایجاد کنید. SMTP رایج ترین است، اما سایرین برای خدمات جایگزین در دسترس هستند. شناسه کاربری و رمز عبور احراز هویت معمولاً ضروری است:

 import nodemailer from 'nodemailer' ; const transporter = nodemailer . createTransport ( { host : 'smtp.yourserver.com' , port : 587 , auth : { user : 'myid@yourserver.com' , pass : 'my-password' } , } ) ;

می توانید با استفاده از روش sendMail() انتقال دهنده به یک یا چند گیرنده ایمیل ارسال کنید:

 const send = await transporter . sendMail ( { from : '"Test Email" <test@email.com>' , to : 'someone@example.com, sometwo@example.com' , cc : 'somethree@example.com' , bcc : 'somefour@example.com' , subject : 'Hello!' , text : 'Plain text version of the message' , html : '<p>HTML version of the message</p>' , } ) ;

همه سرویس گیرنده های ایمیل از پیام های متنی ساده پشتیبانی می کنند. همچنین می‌توانید نسخه‌ای با قالب‌بندی غنی از همان پیام را ارسال کنید که وقتی مشتری ایمیل از HTML پشتیبانی می‌کند استفاده می‌شود (اطلاعات بیشتر در مورد آن در زیر).

NodeMailer بسیاری از گزینه های پیام رسانی دیگر را ارائه می دهد، اما رایج ترین آنها پیوست ها است. آرایه ای از اشیا نام فایل ها و محتوا را تعریف می کند. مثلا:

 const send = await transporter . sendMail ( { attachments : [ { filename : 'text1.txt' , path : '/path/to/file1.txt' } , { filename : 'text2.txt' , path : 'https://myserver.com/text2.txt' } , { filename : 'text3.txt' , content : 'This is the file content!' } , { filename : 'text4.txt' , path : 'data:text/plain;base64,SGVsbG8gd29ybGQh' } ] } ) ;

خدمات ارسال

ارسال ایمیل های یکباره ساده آسان است، اما لطفا چالش را دست کم نگیرید زیرا نیازهای شما در حال تکامل است.

    ممکن است سرور SMTP نداشته باشید . همه سرویس‌های ایمیل SMTP را ارائه نمی‌کنند (Google پشتیبانی اولیه SMTP را در Gmail لغو می‌کند).

    اکثر سرویس ها ایمیل های خروجی را محدود می کنند . اگر ایمیل های زیادی ارسال می کنید، ممکن است به محدودیت ارائه دهنده خود برسید. در آن مرحله، تمام ایمیل‌هایی که از طریق یک سرویس ارسال می‌شوند با شکست مواجه می‌شوند: این خبرنامه و همچنین پیام‌های شخصی و تجاری شم است.

    ممکن است تبدیل به یک هرزنامه شوید . برای گیرندگان آسان است که ایمیل شما را به‌عنوان «ناخواسته» علامت‌گذاری کنند - حتی اگر اینطور نباشد . هنگامی که افراد کافی این کار را انجام می دهند، می توانید متوجه شوید که تمام ایمیل های دامنه شما در سراسر اینترنت مسدود می شوند.

بهتر است از یک سرویس ایمیل اختصاصی به جای سرور ایمیل خود استفاده کنید. خدمات زیر مشکلات احتمالی را کاهش می‌دهد و برخی برنامه‌های رایگان را برای کسانی که نیاز به استفاده کم دارند ارائه می‌دهند:

معماری کاربردی ناهمزمان

ارسال یک ایمیل منفرد اغلب سریع است، اما:

سرور SMTP ممکن است از کار افتاده باشد، پس تلاش مجدد ضروری است، یا

پیام ممکن است در وسط ارسال انبوه خبرنامه گیر بیفتد

به‌جای ارسال ایمیل مستقیماً در برنامه Node.js، بهتر است داده‌ها را به صف کار ارسال کنید. کاربر نهایی نیازی نیست منتظر پاسخ بماند و می تواند به استفاده از برنامه ادامه دهد.

فرآیند دیگری می تواند صف ایمیل را نظارت کند، پیام بعدی را ارسال کند و در صورت بروز خطا، موارد را درخواست کند.

ساخت ایمیل های HTML

HTML5 و CSS3 به طور مداوم در مرورگرهای مدرن به خوبی کار می کنند. کلاینت های ایمیل موضوع دیگری است که ما را به روزهای خسته کننده اواخر دهه 1990 از جداول و سبک های درون خطی بازمی گرداند.

اینها برخی از مشکلاتی است که با آن مواجه خواهید شد:

ده ها سرویس گیرنده ایمیل بومی و مبتنی بر وب از جمله Gmail، Yahoo Mail، Apple Mail، iOS Mail، Android Mail، Windows Mail، Outlook، Outlook.com، (جدید) Outlook، Thunderbird، AOL، Claws، RoundCube و غیره وجود دارد. بر.

همه از موتورهای رندر عجیب و شگفت انگیز خود با مشکلات و باگ های منحصر به فرد استفاده می کنند. به طرز عجیبی، Outlook از سال 2007 از مایکروسافت ورد برای رندر HTML استفاده کرده است (اگرچه نسخه پیش نمایش جدید مبتنی بر مرورگر است).

اکثر مشتریان فونت‌ها، تصاویر، ردیاب‌ها، پرسش‌های رسانه‌ای، iframe، ویدیوها، صداها، فرم‌ها و اسکریپت‌ها را مسدود یا محدود می‌کنند.

حتی کلاینت‌های ایمیل مبتنی بر وب که در مرورگر اجرا می‌شوند باید HTML، CSS و جاوا اسکریپت را که خطرناک است یا می‌تواند بر طرح‌بندی UI تأثیر بگذارد، حذف کنند. به عنوان مثال، نباید امکان داشته باشد که یک ایمیل روی پیوندهای خود کلیک خودکار کند یا یک عنصر را کاملاً روی دکمه حذف قرار دهد.

کلاینت‌های ایمیل می‌توانند HTML شما را مجدداً قالب‌بندی کنند تا مطمئن شوند که یک ستون است یا با تنظیمات برگزیده حالت روشن/تاریک کاربر مطابقت دارد.

امکان کدگذاری دستی ایمیل های HTML وجود دارد، اما، مگر اینکه طرح شما ساده باشد، مشکل، خسته کننده و مستعد خطا است. بخش‌های زیر ابزارها و منابعی را پیشنهاد می‌کنند که ممکن است زندگی شما را آسان‌تر کند.

قالب های ایمیل از پیش ساخته شده

سایت‌های زیر قالب‌های ایمیل قوی و رایگان و تجاری را ارائه می‌کنند که می‌توانید با کمترین تلاش پیش‌نمایش، دانلود و استفاده کنید:

ابزار طراحی قالب ایمیل

ابزارهای طراحی بدون کد زیر به شما امکان می دهند با استفاده از ویرایشگر WYSWYG ساده تر، قالب های ایمیل HTML خود را ایجاد کنید:

برخی از این خدمات همچنین تسهیلات اعتبارسنجی و آزمایش کد را ارائه می دهند.

تبدیل قالب ایمیل

Premailer یک ابزار وب است که URL صفحه یا کد منبع را چسبانده و آن را به قالب های HTML و متن ساده با ایمیل سازگار می کند. یک REST API و Node.js premailer-api ماژول وجود دارد که باید فرآیند را خودکار کنید.

ابزارهای مشابه عبارتند از:

ابزارهای نشانه گذاری قالب ایمیل

Cerberus، Email Framework، Email Skeleton، و Good Email Code قطعات HTML را ارائه می دهند که می توانید آنها را کپی کرده و در قالب های خود تطبیق دهید.

HEML و MJML زبان های نشانه گذاری ایمیل هستند. آنها شبیه HTML هستند اما از مشکلات سازگاری معمولی جلوگیری می کنند. Maizzle رویکرد مشابهی را با استفاده از Tailwind CSS اتخاذ می کند.

Parcel یک ویرایشگر کد است که قالب بندی ایمیل را درک می کند و می تواند پیش نمایش ها را نشان دهد. همچنین تعداد زیادی پسوند ایمیل برای VS Code پیدا خواهید کرد.

caniemail.com معادل ایمیل صفحه وب caniuse.com است و گزارش می دهد که آیا یک ویژگی HTML یا CSS خاص در چندین مشتری قابل استفاده است یا خیر. در نهایت، ایمیل قابل دسترسی منابع و پیوندهای مرتبط را فراهم می کند.

ابزارهای تست ایمیل

در حالی که یک ایمیل HTML ممکن است در برنامه های ایمیل خود شما کار کند، آیا می توانید مطمئن باشید که در سایر برنامه ها کار می کند؟ ابزارهای زیر کمک خواهند کرد، اما هیچ جایگزینی برای آزمایش طیف وسیعی از دستگاه‌های واقعی، سیستم‌عامل‌ها و کلاینت‌های ایمیل وجود ندارد.

تحلیل ایمیل HTML و MailTrap کد منبع شما را تأیید می‌کنند و مشکلاتی را که ممکن است در کلاینت‌های خاص با آن مواجه شوید گزارش می‌کنند.

خدمات پیش‌نمایش ایمیل، Mailosaur و خدمات پیش‌نمایش ایمیل، امکانات پیش‌نمایش طرح‌بندی را فراهم می‌کنند تا بتوانید تحلیل کنید که طراحی شما در انواع مشتریان چگونه به نظر می‌رسد.

در نهایت، Litmus و Email on Acid طیف وسیعی از ابزارها را برای اعتبارسنجی کد، تحلیل قابلیت دسترسی، پیش‌نمایش بین مشتریان، ثبت تجزیه و تحلیل و اجرای کمپین‌های بازاریابی کامل دارند.

یاد بگیرید که چگونه ایمیل ها را به روش صحیح کدنویسی کنید

همانطور که در بالا دیدیم، ابزارهای زیادی وجود دارند که می‌توانند به شما در ایجاد طرح‌بندی ایمیل‌ها کمک کنند که در بسیاری از مشتریان ایمیل موجود در آنجا کار کنند. اما هیچ چیز مانند درک نحوه کدنویسی به تنهایی نیست، به خصوص زمانی که باید اشکالات اجتناب ناپذیری را که به وجود می آیند مرتب کنید.

اگر می‌خواهید نکات و نکات کدنویسی ایمیل را بیاموزید (حتی اگر فقط به عنوان یک نسخه پشتیبان باشد)، Crafting HTML Email توسط Rémi Parmentier را تحلیل کنید. این دیدگاه‌های مدرن در ساخت قالب‌های ایمیل شما، بهترین شیوه‌های ضروری، نحوه گفت ن تعامل به ایمیل‌ها و نحوه دسترسی به قالب‌های خود را پوشش می‌دهد. حتی شما را در یک مطالعه موردی راهنمایی می کند تا همه اینها را در عمل ببینید.

خواندن ایمیل های دریافتی

اکثر برنامه‌ها فقط به ارسال ایمیل نیاز دارند، اما ممکن است مواردی وجود داشته باشد که بخواهید ایمیل‌های دریافتی را تحلیل کنید - برای مواردی مانند ثبت خدمات، لغو اشتراک، پشتیبانی خودکار و غیره. در حالی که فراتر از محدوده این آموزش است، ماژول های Node.js مانند ImapFlow به برنامه شما اجازه می دهد تا به صندوق ورودی IMAP متصل شود، پیام ها را واکشی کند و پاسخ را پردازش کند:

 import ImapFlow from 'imapflow' ; const client = new ImapFlow ( { host : 'imap.email' , port : 993 , secure : true , auth : { user : 'account@imap.email' , pass : 'mypassword' } } ) ; try { await client . connect ( ) ; const lock = await client . getMailboxLock ( 'INBOX' ) ; const msg = await client . fetchOne ( client . mailbox . exists , { source : true } ) ; console . log ( msg . source . toString ( ) ) ; lock . release ( ) ; await client . logout ( ) ; } catch ( e ) { console . log ( e ) ; }

نتیجه

ارسال ایمیل از برنامه های وب Node.js آسان است. ارسال ایمیل هایی که خوب به نظر می رسند، در همه کلاینت های ایمیل به طور قابل اعتماد کار می کنند، کاربر را متوقف نمی کنند و باعث دردسرهای هرزنامه نمی شوند، می تواند بسیار دشوارتر باشد.

توصیه می‌کنم برای شروع ایمیل‌ها را ساده نگه دارید، شاید پیام‌های متنی ساده را انتخاب کنید. مطمئناً، مشتریان و بخش بازاریابی شما به زودی رنگ‌ها و انیمیشن‌های فانتزی را می‌خواهند، اما شما می‌توانید آن را فردا تحویل دهید!

سوالات متداول (سؤالات متداول) در مورد ارسال ایمیل با استفاده از Node.js

چگونه می توانم با استفاده از Node.js فایل ها را به ایمیل های خود پیوست کنم؟

پیوست کردن فایل‌ها به ایمیل‌های خود با استفاده از Node.js بسیار ساده است. می‌توانید از ویژگی «پیوست‌ها» در گزینه‌های ایمیل استفاده کنید. این ویژگی آرایه ای از گزینه های پیوست را می گیرد. هر گزینه پیوست یک شی است که حاوی نام فایل و ویژگی های مسیر است. ویژگی filename نام فایلی است که در ایمیل نشان داده می شود و ویژگی path محل فایل روی سیستم شما است.

در اینجا یک مثال است:

 let mailOptions = {
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Hello',
text: 'Hello world',
attachments: [
{
filename: 'file.txt',
path: '/path/to/file.txt'
}
]
};

آیا می توانم با استفاده از Node.js ایمیل های HTML ارسال کنم؟

بله، می توانید با استفاده از Node.js ایمیل های HTML ارسال کنید. به جای استفاده از ویژگی "text" در گزینه های ایمیل، از ویژگی "html" استفاده می کنید. مقدار این ویژگی محتوای HTML ایمیل است.

در اینجا یک مثال است:

 let mailOptions = {
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Hello',
html: '<h1>Hello world</h1>'
};

چگونه می توانم برای چندین گیرنده ایمیل ارسال کنم؟

برای ارسال ایمیل به چندین گیرنده، می‌توانید فهرستی از آدرس‌های ایمیل را که با کاما در ویژگی «to» گزینه‌های ایمیل از هم جدا شده‌اند، ارائه کنید.

در اینجا یک مثال است:

 let mailOptions = {
from: 'sender@example.com',
to: 'receiver1@example.com, receiver2@example.com',
subject: 'Hello',
text: 'Hello world'
};

چگونه می توانم خطاها را هنگام ارسال ایمیل مدیریت کنم؟

با استفاده از عملکرد برگشت به تماس، می توانید خطاها را هنگام ارسال ایمیل مدیریت کنید. این تابع به عنوان آرگومان دوم به متد 'sendMail' ارسال می شود. تابع callback دو پارامتر دارد: یک شی خطا و یک شی اطلاعات. اگر هنگام ارسال ایمیل خطایی رخ دهد، شی خطا حاوی اطلاعات مربوط به خطا خواهد بود.

در اینجا یک مثال است:

 transporter.sendMail(mailOptions, function(error, info){
if (error) { console.log(error); } else {console.log('Email sent: ' + info.response); } });

آیا می توانم از یک حساب کاربری جیمیل برای ارسال ایمیل استفاده کنم؟

بله، می توانید از یک حساب کاربری جیمیل برای ارسال ایمیل استفاده کنید. با این حال، باید «برنامه‌های کمتر امن» را در تنظیمات حساب جیمیل خود فعال کنید. همچنین، باید از 'smtp.gmail.com' به عنوان میزبان و 587 به عنوان پورت در گزینه های انتقال دهنده استفاده کنید.

در اینجا یک مثال است:

 let transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, auth: { user: 'your-email@gmail.com', pass: 'your-password' } });

چگونه می توانم به صورت ناهمزمان ایمیل ارسال کنم؟

با استفاده از Promises می توانید به صورت ناهمزمان ایمیل ارسال کنید. متد 'sendMail' یک Promise را برمی‌گرداند که هنگام ارسال ایمیل با یک شی اطلاعات حل می‌شود.

در اینجا یک مثال است:

 transporter.sendMail(mailOptions) .then(info => console.log('Email sent: ' + info.response)) .catch(error => console.log(error));

آیا می توانم از یک سرور SMTP سفارشی برای ارسال ایمیل استفاده کنم؟

بله، می توانید از یک سرور SMTP سفارشی برای ارسال ایمیل استفاده کنید. شما باید جزئیات میزبان، پورت و احراز هویت سرور SMTP را در گزینه های انتقال دهنده ارائه دهید.

در اینجا یک مثال است:

 let transporter = nodemailer.createTransport({ host: 'smtp.example.com', port: 587, auth: { user: 'username', pass: 'password' } });

چگونه می توانم ایمیل هایی با یک مجموعه نویسه خاص ارسال کنم؟

می‌توانید با استفاده از ویژگی «charset» در گزینه‌های ایمیل، ایمیل‌هایی با مجموعه نویسه‌های خاص ارسال کنید. این ویژگی مجموعه نویسه های ایمیل را تنظیم می کند.

در اینجا یک مثال است:

 let mailOptions = { from: 'sender@example.com', to: 'receiver@example.com', subject: 'Hello', text: 'Hello world', charset: 'UTF-8' };

آیا می توانم ایمیل هایی با نوع محتوای خاص ارسال کنم؟

بله، می توانید ایمیل هایی با نوع محتوای خاص ارسال کنید. می‌توانید از ویژگی «contentType» در گزینه‌های ایمیل استفاده کنید. این ویژگی نوع محتوای ایمیل را تعیین می کند.

در اینجا یک مثال است:

 let mailOptions = { from: 'sender@example.com', to: 'receiver@example.com', subject: 'Hello', text: 'Hello world' contentType: 'text/plain };

چگونه می توانم ایمیل هایی با رمزگذاری خاص ارسال کنم؟

می‌توانید با استفاده از ویژگی «encoding» در گزینه‌های ایمیل، ایمیل‌هایی با رمزگذاری خاص ارسال کنید. این ویژگی کدگذاری ایمیل را تنظیم می کند.

در اینجا یک مثال است:

 let mailOptions = { from: 'sender@example.com', to: 'receiver@example.com', subject: 'Hello', text: 'Hello world', encoding: 'base64' };

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است