הודעות דוא"ל הנשלחות מהאתר שלך מגיעות לעיתים קרובות לתיבת הספאם. לקוחות עלולים לא לקבל התראות על הזמנות. מצב זה מוכר לכולנו. לרוב, הסיבה היא הגדרת שרת SMTP שגויה או היעדר רשומות SPF/DKIM. עם ניסיון של 7+ שנים ולמעלה מ-200 פרויקטים של אספקת דוא"ל, אנו מבטיחים שיעור אספקה לתיבת הדואר הנכנס של 99.9%. במאמר זה, אנו מפרקים כיצד להגדיר שליחת דוא"ל דרך SMTP באמצעות Nodemailer, להקים מאגר חיבורים לעומס גבוה, ולהימנע מבעיות אספקה. הגדרה סוהר אורכת בין 1 ל-5 ימים בהתאם למורכבות. חסכו עד $500 לחודש על ידי מעבר לשרת ממסר SMTP מוגדר כראוי. החיסכון החודשי האופייני נע בין $200 ל-$1500 בהתאם לנפח. אם אתם רוצים פתרון מוכן, צרו קשר לקבלת הערכת פרויקט.
סיבות לכך שהודעות דוא"ל מגיעות לספאם
ישנן שלוש סיבות עיקריות. ראשית, היעדר רשומת SPF (Sender Policy Framework) ב-DNS: שרת ה-SMTP אינו מורשה לשלוח דוא"ל מהדומיין שלך. שנית, מוניטין ירוד של כתובת ה-IP ממנה נשלחות ההודעות. שלישית, כותרות דוא"ל שגויות (ללא חתימת DKIM, כתובת From שגויה). גם אם אתם משתמשים ב-SMTP חינמי (Gmail, Yandex), עליכם להגדיר את שלושת המרכיבים הללו. אחרת, ההודעות יגיעו בוודאות לתיבת הקידום או לספאם.
כיצד אנו מגדירים SMTP: מקרה מהפרקטיקה שלנו
לאחרונה, מהפרקטיקה שלנו: הגדרנו שליחת דוא"ל ללקוח מסחר אלקטרוני עם 10,000 הודעות טרנזקציוניות ביום: אישורי הזמנות, חשבוניות, עדכוני סטטוס משלוח. השתמשנו בשרת הממסר SMTP של Mailgun עם הפרמטרים הבאים:
- מאגר חיבורים: 5 חיבורים מקבילים, 100 הודעות לכל חיבור
- תור עם Bull ולוגיקת ניסיון חוזר: 3 ניסיונות עם השהיה של 30 שניות
- מערך מלא של רשומות DNS: SPF, DKIM, DMARC (מדיניות הסגר)
- ניטור הודעות חוזרות (bounced) באמצעות webhooks של Mailgun
תוצאה: שיעור אספקה לתיבת הדואר הנכנס — 99.2% (לעומת 40% לפני ההגדרה). זה מראה שהגדרה נכונה יעילה פי 2.5. עלויות השליחה ירדו ב-30% על ידי מעבר משירות ESP יקר. הניסיון מראה שהגדרת SMTP נכונה מחזירה את עצמה בתוך החודש הראשון.
בחירת טכנולוגיה: Nodemailer לעומת SDKs של צד שלישי
Nodemailer מהיר פי 2 להגדרה מאשר שילוב SDK נפרד לכל ספק: ספרייה אחת מכסה את כל שרתי ה-SMTP הפופולריים. SDKs של SendGrid או Mailgun קושרים אתכם לספק יחיד. לגמישות, אנו משתמשים ב-Nodemailer + Bull לתורים. למי שמשתמש ב-Postfix, ההגדרה דומה אך דורשת הגדרות פורט שונות. נטרלו רשימות שחורות יומית כדי לשמור על מוניטין השולח. שליחה עם מאגר חיבורים יעילה פי 10 מאספקה רציפה.
שלב 1: שליחה דרך Nodemailer ומאגר חיבורים
מדריך זה מראה לכם כיצד לשלוח דוא"ל מהאתר באמצעות SMTP. הגדרת Nodemailer היא פשוטה.
npm install nodemailer npm install -D @types/nodemailer import nodemailer from 'nodemailer';
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST, // smtp.gmail.com, smtp.yandex.ru, etc.
port: Number(process.env.SMTP_PORT ?? 465),
secure: true, // true для 465, false для 587
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
// Для корпоративных SMTP с self-signed сертификатами
tls: {
rejectUnauthorized: process.env.NODE_ENV === 'production',
},
});
// Проверка соединения при старте сервера
await transporter.verify();
console.log('SMTP ready');
שליחת הודעת דוא"ל
async function sendEmail(params: {
to: string | string[];
subject: string;
html: string;
text?: string;
attachments?: nodemailer.Attachment[];
}) {
const info = await transporter.sendMail({
from: `"Acme Support" <[email protected]>`,
to: params.to,
subject: params.subject,
html: params.html,
text: params.text,
attachments: params.attachments,
headers: {
'X-Mailer': 'Acme App v2',
},
});
return info.messageId;
}
// Пример с PDF-вложением
await sendEmail({
to: '[email protected]',
subject: 'Ваш инвойс #INV-2026-042',
html: invoiceHtml,
attachments: [
{
filename: 'invoice-2026-042.pdf',
content: pdfBuffer,
contentType: 'application/pdf',
},
],
});
מאגר חיבורים לעומס גבוה
מאגר חיבורי SMTP מגדיל את התפוקה. בעת שליחת הודעות רבות, צרו מאגר במקום transport יחיד:
const poolTransporter = nodemailer.createTransport({
pool: true,
maxConnections: 5, // параллельных соединений
maxMessages: 100, // писем на соединение до переподключения
host: process.env.SMTP_HOST,
port: 465,
secure: true,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
}); שלב 2: כיצד להגדיר רשומות DNS לאספקה?
הגדרת DMARC SPF היא קריטית. השתמשו בתור דוא"ל Bull לניסיונות חוזרים. להשוואה מפורטת של ספקי SMTP, ראו את הטבלה למטה.
| סוג רשומה | דוגמה | מטרה |
|---|---|---|
| SPF | npm install nodemailer npm install -D @types/nodemailer |
מאשרת לשרת ה-SMTP לשלוח דוא"ל מהדומיין |
| DKIM | Selector import nodemailer from 'nodemailer'; const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, // smtp.gmail.com, smtp.yandex.ru, etc. port: Number(process.env.SMTP_PORT ?? 465), secure: true, // true для 465, false для 587 auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, // Для корпоративных SMTP с self-signed сертификатами tls: { rejectUnauthorized: process.env.NODE_ENV === 'production', }, }); // Проверка соединения при старте сервера await transporter.verify(); console.log('SMTP ready'); עם מפתח ציבורי |
חותמת על ההודעה, מאמתת את דומיין השולח |
| DMARC | async function sendEmail(params: { to: string | string[]; subject: string; html: string; text?: string; attachments?: nodemailer.Attachment[]; }) { const info = await transporter.sendMail({ from: `"Acme Support" <[email protected]>`, to: params.to, subject: params.subject, html: params.html, text: params.text, attachments: params.attachments, headers: { 'X-Mailer': 'Acme App v2', }, }); return info.messageId; } // Пример с PDF-вложением await sendEmail({ to: '[email protected]', subject: 'Ваш инвойс #INV-2026-042', html: invoiceHtml, attachments: [ { filename: 'invoice-2026-042.pdf', content: pdfBuffer, contentType: 'application/pdf', }, ], }); |
מדיניות לטיפול בהודעות שנכשלו ב-SPF/DKIM |
שלב 3: ספקי SMTP פופולריים
| ספק | מארח SMTP | פורט | מגבלה |
|---|---|---|---|
| Gmail | smtp.gmail.com | 465/587 | 500/יום |
| Yandex | smtp.yandex.ru | 465 | 500/יום |
| Mail.ru | smtp.mail.ru | 465 | 500/יום |
| Mailgun | smtp.mailgun.org | 587 | לפי תוכנית |
| Brevo | smtp-relay.brevo.com | 587 | 300/יום בחינם |
שלב 4: בדיקות במצב פיתוח
בדיקת SMTP עם Mailtrap מומלצת. לפיתוח, השתמשו ב-Mailtrap או Ethereal — שרתי SMTP מדומים המיירטים הודעות ומציגים אותן בממשק אינטרנט:
// Ethereal для локального теста
if (process.env.NODE_ENV !== 'production') {
const testAccount = await nodemailer.createTestAccount();
transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
auth: {
user: testAccount.user,
pass: testAccount.pass,
},
});
} טעויות נפוצות בהגדרת SMTP
- היעדר SPF/DKIM/DMARC — הודעות מגיעות לספאם
- שימוש ב-SMTP חינמי לשליחות מסחריות — חסימה מהירה
- אין מאגר חיבורים לעומסים >1000 הודעות/יום — אובדן הודעות
- התעלמות מהתראות bounce — ירידה במוניטין
- שליחה מכתובת From שגויה — דחיית הודעות
מה כלול בהגדרה סוהר
- ביקורת על תצורת הדוא"ל הנוכחית
- בחירת ספק SMTP אופטימלי
- הגדרת DNS: SPF, DKIM, DMARC
- שילוב Nodemailer עם מאגר ותור (Bull)
- ניטור bounce והגדרת webhooks
- תיעוד תפעולי
- הדרכת צוות (ייעוץ מקוון של שעה)
- אחריות לאספקה של 99% + תמיכה לשבועיים
לוחות זמנים
הגדרת Nodemailer + SMTP + סביבת בדיקות — חצי יום. עם תור Bull ולוגיקת ניסיון חוזר — יום אחד. מחזור מלא (ניתוח → עיצוב → יישום → בדיקה → פריסה) — בין 1 ל-5 ימים בהתאם לנפח התעבורה. אם יש לכם שאלות על הגדרת SMTP, צרו קשר — נעזור. הערכת פרויקט.
כדי להימנע מספאם, ודאו הגדרת אספקת דוא"ל נכונה. יישמו אמצעי הגנה מפני רשימות שחורות.







