Skip to content

מעבר לשליחת מיילים חינמית — שינוי הגדרות SMTP בלבד (בהמשך ל-otzaria#1044) #162

Description

@palmoni5

@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 שכבר עובד

המלצה

  1. לבחור ספק (Gmail App Password הכי מהיר; Brevo/SMTP2GO אם רוצים לשמור על שליחה מהדומיין)
  2. לעדכן את משתני ה-SMTP_* בסביבת הייצור
  3. לוודא בשליחת דיווח בדיקה שהכול עובר, כולל ה-CC למקורות חיצוניים (ספריא וכו')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions