@ClickAndGoScript
נפתח בהמשך ל-Otzaria/otzaria#1044, שם הוצע להקים Cloudflare Worker עם Gmail API כדי לחסוך את עלות שליחת המיילים של דיווחי השגיאות. לאחר בדיקת הקוד — הפתרון פשוט בהרבה, ומרוכז כאן כי הקוד הרלוונטי נמצא בריפו הזה.
ממצאים — איך שליחת המיילים עובדת היום
כל שליחות המייל באתר עוברות דרך שכבה משותפת אחת: src/lib/smtp-transport.js, שמבוססת על nodemailer ומוגדרת כולה במשתני סביבה:
SMTP_HOST, SMTP_PORT, SMTP_SECURE, SMTP_USER, SMTP_PASS, SMTP_FROM
דרכה עוברים: דיווחי שגיאות (reportingerrors), איפוס סיסמה, אימות מייל, send-email, התראות סנכרון דיקטה ו-emailService.
מנגנון דיווח השגיאות עצמו (src/app/api/reportingerrors/route.js) כבר כולל הגנות טובות שמצמצמות את כמות המיילים בפועל:
- הגבלת קצב לפי IP (5 דיווחים לדקה)
- מניעת כפילויות אטומית — תוכן זהה לא נשלח שוב לאותו נמען בתוך 6 חודשים (
SentEmailLog עם אינדקס ייחודי)
- תקרות גודל לכל שדה + תקרת body של 256KB
- כל דיווח נשמר ב-MongoDB (
ErrorReport) גם אם המייל נכשל
המסקנה: אין צורך בשינוי קוד
העלות נובעת מספק ה-SMTP המחובר כרגע. מעבר לספק חינמי הוא שינוי הגדרות בלבד ב-.env:
אפשרות א' — Gmail SMTP עם App Password (חינם)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=otzaria.200@gmail.com
SMTP_PASS=<App Password>
SMTP_FROM=otzaria.200@gmail.com
- דורש הפעלת 2FA בחשבון + יצירת App Password
- מגבלה: ~500 מיילים ביום (זהה למגבלת Gmail API שהוצעה ב-issue המקורי — "בלי הגבלה" שנכתב שם אינו מדויק)
- יתרון נוסף:
otzaria.200@gmail.com הוא ממילא הנמען הראשי של הדיווחים, כך שהשליחה מאותו חשבון טבעית
אפשרות ב' — ספק SMTP עם חבילה חינמית
Brevo (300 ליום חינם), SMTP2GO, Resend ודומיהם — כולם מתחברים לאותם משתני סביבה, וחלקם מאפשרים שליחה מדומיין otzaria.org (עם SPF/DKIM) שמשפרת עבירוּת.
למה לא Cloudflare Worker + Gmail API (ההצעה המקורית)
- מוסיף רכיב תשתית שלם (Worker, secrets, ניהול OAuth refresh token) עבור תוצאה שמושגת בשינוי
.env
- refresh token של אפליקציה במצב "Testing" ב-Google Cloud פג אחרי 7 ימים — נדרש פרסום האפליקציה
- נקודת כשל נוספת ומשטח תקיפה נוסף (צריך להגן על ה-Worker מפני שימוש לרעה לספאם)
- בניית MIME ידנית מול Gmail API — שביר לעומת nodemailer שכבר עובד
המלצה
- לבחור ספק (Gmail App Password הכי מהיר; Brevo/SMTP2GO אם רוצים לשמור על שליחה מהדומיין)
- לעדכן את משתני ה-
SMTP_* בסביבת הייצור
- לוודא בשליחת דיווח בדיקה שהכול עובר, כולל ה-CC למקורות חיצוניים (ספריא וכו')
@ClickAndGoScript
נפתח בהמשך ל-Otzaria/otzaria#1044, שם הוצע להקים Cloudflare Worker עם Gmail API כדי לחסוך את עלות שליחת המיילים של דיווחי השגיאות. לאחר בדיקת הקוד — הפתרון פשוט בהרבה, ומרוכז כאן כי הקוד הרלוונטי נמצא בריפו הזה.
ממצאים — איך שליחת המיילים עובדת היום
כל שליחות המייל באתר עוברות דרך שכבה משותפת אחת:
src/lib/smtp-transport.js, שמבוססת על nodemailer ומוגדרת כולה במשתני סביבה:SMTP_HOST,SMTP_PORT,SMTP_SECURE,SMTP_USER,SMTP_PASS,SMTP_FROMדרכה עוברים: דיווחי שגיאות (
reportingerrors), איפוס סיסמה, אימות מייל,send-email, התראות סנכרון דיקטה ו-emailService.מנגנון דיווח השגיאות עצמו (
src/app/api/reportingerrors/route.js) כבר כולל הגנות טובות שמצמצמות את כמות המיילים בפועל:SentEmailLogעם אינדקס ייחודי)ErrorReport) גם אם המייל נכשלהמסקנה: אין צורך בשינוי קוד
העלות נובעת מספק ה-SMTP המחובר כרגע. מעבר לספק חינמי הוא שינוי הגדרות בלבד ב-
.env:אפשרות א' — Gmail SMTP עם App Password (חינם)
otzaria.200@gmail.comהוא ממילא הנמען הראשי של הדיווחים, כך שהשליחה מאותו חשבון טבעיתאפשרות ב' — ספק SMTP עם חבילה חינמית
Brevo (300 ליום חינם), SMTP2GO, Resend ודומיהם — כולם מתחברים לאותם משתני סביבה, וחלקם מאפשרים שליחה מדומיין otzaria.org (עם SPF/DKIM) שמשפרת עבירוּת.
למה לא Cloudflare Worker + Gmail API (ההצעה המקורית)
.envהמלצה
SMTP_*בסביבת הייצור