שילוב Amazon SES לשליחת אימיילים
עם ניסיון של למעלה מ-5 שנים ויותר מ-100 פרויקטים מוצלחים, אנו מספקים שילוב חלק של Amazon SES. כאשר נפח האימיילים הטרנזקציונליים היומי שלך עולה על 50,000, עלות השליחה דרך SendGrid או Postmark הופכת להוצאה משמעותית. Amazon SES מציעה תמחור נמוך לכל אימייל (לדוגמה, $0.10 לכל 1000 אימיילים), אך ההתקנה שלה דורשת הבנה של מנגנוני מוניטין: DKIM, SPF, DMARC, טיפול בהקפצות. הגדרה שגויה עלולה להוביל לחסימת הדומיין על ידי ספקים. אנו מתמחים בשילוב חלק של SES עם ערימות טכנולוגיה מודרניות—מ-Next.js ועד Laravel—עם אחריות למסירות של 98%+ וחיסכון חודשי אופייני של $500–$10,000. יש לנו עשרות פרויקטים עם מיליוני אימיילים שנשלחו. קבל ייעוץ מהנדס: נעריך את הפרויקט שלך תוך יום.
יציאה מ-Sandbox של SES
כברירת מחדל, SES פועל במצב Sandbox—ניתן לשלוח רק לכתובות מאומתות. עבור סביבת ייצור, שלח בקשה דרך AWS Console → SES → Account Dashboard → Request production access. תאר את מקרה השימוש שלך: נפח אימיילים, סוג (טרנזקציונלי או שיווקי), ואמצעי ניהול מוניטין. האישור בדרך כלל לוקח 24 שעות. אם אתה צריך את זה מהר יותר, אנו עוזרים עם הבקשה. לאחר היציאה מה-sandbox, תוכל לשלוח לכל כתובת ללא הגבלות.
למה SES משתלם יותר
SES זול פי כמה ממתחרים: בנפחים גבוהים (לדוגמה, מיליון אימיילים בחודש), SES עולה $100 בעוד SendGrid גובה $1,950, חיסכון של $1,850 בחודש. בניגוד לספקים אחרים, SES נותן שליטה מלאה: מאגרי IP ייעודיים, הגדרות מותאמות אישית, אינטגרציה עם CloudWatch לניטור. עם SNS, ניתן להגיב בגמישות לאירועים ולחסום אוטומטית כתובות בעייתיות, תוך שמירה על מוניטין שולח גבוה (Sender Score 95+).
| קריטריון | Amazon SES | SendGrid | Postmark |
|---|---|---|---|
| תמחור | תשלום לפי שימוש, ללא עמלה קבועה | עמלה קבועה + חריגות | עמלה קבועה + חריגות |
| מהירות שליחה | גבוהה, עד 100+ אימיילים לשנייה | מוגבל לפי תוכנית | מוגבל לפי תוכנית |
| התאמה אישית | מלאה: IPs ייעודיים, Configuration Sets | מוגבלת | מוגבלת |
| טיפול בהקפצות | מובנה דרך SNS/SQS | מובנה | מובנה |
| ניטור | CloudWatch, SNS | לוח בקרה מובנה | לוח בקרה מובנה |
מקרה בוחן: מעבר מ-SendGrid ל-SES
מהניסיון שלנו—פרויקט מעבר מ-SendGrid ל-SES עבור לקוח מסחר אלקטרוני גדול עם נפח של 2 מיליון אימיילים בחודש. החיסכון בעלויות עלה על 80%—סכום חודשי משמעותי (בעבר $3,900, עכשיו $200). בנוסף, הגדרנו SNS/SQS לניהול הקפצות אוטומטי, והפחתנו את שיעור התלונות מ-0.5% ל-0.02%. כל התהליך לקח 5 ימים. המפתח היה מקסום מוניטין השולח: ביצענו חימום כתובות IP במשך שבועיים והגדרנו מדיניות DMARC.
מה כלול בעבודה שלנו
- אימות דומיין ב-SES, הגדרת DKIM, SPF, DMARC
- יצירת משתמש IAM עם הרשאות מינימליות
- SES Configuration Set + SNS למעקב אחר אירועים (Bounce, Complaint, Delivery, Open, Click)
- עיבוד הקפצות ותלונות דרך SQS + Lambda
- שילוב של
@aws-sdk/client-sesביישום שלך - בדיקת 10+ תרחישי מסירות ובדיקות ציון ספאם
- תיעוד (ארכיטקטורה, מדריך הגדרה, פתרון תקלות)
- 6 חודשי תמיכה לאחר ההשקה (התראות ניטור, כוונון ביצועים)
תהליך העבודה
- ביקורת—ניתוח שליחת האימיילים הנוכחית, נפח, דרישות (יום אחד)
- עיצוב—בחירת ארכיטקטורה (Lambda/EC2/Serverless) (יום אחד)
- יישום—הגדרת SES, כתיבת קוד (2–3 ימים)
- בדיקות—בדיקת מסירות, דירוג ספאם, טיפול בהקפצות (יום אחד)
- פריסה—פריסה לסביבת ייצור, הגדרת ניטור CloudWatch (יום אחד)
טעויות נפוצות בהגדרת SES
טעות מס' 1: התעלמות מחימום כתובות IP. אם תתחיל לשלוח מיליון אימיילים מכתובת IP חדשה מיד, הספקים יחסמו אותה. טעות מס' 2: רשומות reverse DNS (PTR) שגויות. AWS מאפשרת להגדיר MAIL FROM מותאם אישית, אך יש לאמת אותו. טעות מס' 3: חוסר בטיפול בהקפצות. אם לא תסיר תלונות וכתובות לא קיימות, המוניטין יורד והאימיילים מגיעים לספאם. אנו הופכים זאת לאוטומטי דרך SQS ו-Lambda, ומפחיתים את שיעור ההקפצות מתחת ל-0.1%.
מגבלות SES
| סוג מגבלה | ערך |
|---|---|
| שליחה יומית ב-Sandbox | מוגבלת (דורשת בקשה להגדלה) |
| גודל אימייל מקסימלי | 10 MB |
| נמענים לכל בקשה | 50 (דרך SendBulkTemplatedEmail) |
| קצב שליחה | עד 100 אימיילים לשנייה (ניתן להגדיל) |
יישום טכני
התקנת SDK ושליחה בסיסית
npm install @aws-sdk/client-ses import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';
const ses = new SESClient({
region: process.env.AWS_REGION ?? 'eu-west-1',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
},
});
async function sendEmail(params: {
to: string | string[];
subject: string;
html: string;
text?: string;
}) {
const command = new SendEmailCommand({
Source: 'Acme <[email protected]>',
Destination: {
ToAddresses: Array.isArray(params.to) ? params.to : [params.to],
},
Message: {
Subject: {
Data: params.subject,
Charset: 'UTF-8'
},
Body: {
Html: {
Data: params.html,
Charset: 'UTF-8'
},
...(params.text ? { Text: { Data: params.text, Charset: 'UTF-8' } } : {}),
},
},
// ConfigurationSetName для отслеживания событий
ConfigurationSetName: 'production-config-set',
});
return ses.send(command);
} שליחה בכמות גדולה דרך תבניות
import { SendBulkTemplatedEmailCommand } from '@aws-sdk/client-ses'; // До 50 получателей за запрос, шаблон хранится в SES
await ses.send(new SendBulkTemplatedEmailCommand({
Source: '[email protected]',
Template: 'weekly-digest-ru',
DefaultTemplateData: JSON.stringify({ name: 'Пользователь', articles: [] }),
Destinations: users.map(user => ({
Destination: { ToAddresses: [user.email] },
ReplacementTemplateData: JSON.stringify({
name: user.name,
articles: user.personalizedArticles,
}),
})),
}));
הגדרת Configuration Set
import { CreateConfigurationSetCommand, CreateConfigurationSetEventDestinationCommand, EventType, } from '@aws-sdk/client-ses'; // Создать Configuration Set
await ses.send(new CreateConfigurationSetCommand({ ConfigurationSet: { Name: 'production-config-set' } })); // Добавить SNS destination для событий
await ses.send(new CreateConfigurationSetEventDestinationCommand({ ConfigurationSetName: 'production-config-set', EventDestination: { Name: 'sns-events', Enabled: true, MatchingEventTypes: [ EventType.BOUNCE, EventType.COMPLAINT, EventType.DELIVERY, EventType.OPEN, EventType.CLICK, ], SNSDestination: { TopicARN: process.env.AWS_SNS_TOPIC_ARN, }, }, }));
טיפול בהקפצות ותלונות דרך SNS
// SQS worker обрабатывает события SES
for (const record of event.Records) {
const snsMessage = JSON.parse(record.body);
const sesEvent = JSON.parse(snsMessage.Message);
if (sesEvent.notificationType === 'Bounce') {
for (const recipient of sesEvent.bounce.bouncedRecipients) {
await suppressEmail(recipient.emailAddress, 'bounce');
}
}
if (sesEvent.notificationType === 'Complaint') {
for (const recipient of sesEvent.complaint.complainedRecipients) {
await suppressEmail(recipient.emailAddress, 'complaint');
}
}
} לוח זמנים
הגדרת SES + אימות דומיין + שילוב יישום—2–3 ימים. עם טיפול בהקפצות SNS/SQS—יום עד יומיים נוספים. צור קשר לקבלת הערכת עלות מותאמת לנפח האימיילים שלך—קבל ייעוץ תוך יום. הזמן שילוב Amazon SES והפחת את עלויות האימיילים שלך.
Amazon Simple Email Service (SES) — ויקיפדיה







