מעבר מ-App Engine Mail API לשירות שמבוסס על SMTP

כדי לשפר את אבטחת האימייל ולהבטיח מסירה אמינה של אימיילים בכמויות גדולות, צריך לעבור מ-Mail API מדור קודם לשירות של ספק אימייל רגיל מצד שלישי שמשתמש ב-Simple Mail Transfer Protocol ‏ (SMTP), כמו SendGrid,‏ Mailgun או Mailjet.

במדריך הזה מוסבר איך להעביר שירותים של דואר יוצא מ-Mail API לשירות אימייל מבוסס SMTP. אפשר להשתמש בהוראות האלה כדי לעבור לכל ספק אימייל של צד שלישי שמבוסס על SMTP, או להשתמש בסביבת זמן ריצה נתמכת אחרת. במדריך הזה לא מוסבר איך להעביר הודעות נכנסות שמשתמשות בחלופה של צד שלישי.

התקן SMTP מציע את היתרונות הבאים בהשוואה ל-Mail API מדור קודם של App Engine:

  • שירותים מבוססי SMTP משפרים את מסירת האימיילים כי הם מפחיתים את הסיכוי שהאימיילים יסומנו כספאם.

  • בשירותים שמבוססים על SMTP, אפשר לגשת לדוחות מפורטים של ניתוח נתונים על פתיחות של אימיילים, קליקים והחזרות. הדוחות האלה מספקים מידע שימושי על האינטראקציה של המשתמשים עם האימיילים שלכם.

  • יש לכם שליטה מלאה על המוניטין של השולח ועל אימות האימייל.

  • מגבלות שליחה יומיות מוגדלות בהשוואה ל-Mail API מדור קודם, עם גישה לתכונות מתקדמות כמו בדיקות A/B, פילוח ותבניות.

סקירה כללית של תהליך המיגרציה

תהליך ההעברה כולל את השלבים הבאים:

  1. מגדירים את שירות האימייל מבוסס ה-SMTP כדי לקבל את פרטי הכניסה ל-SMTP.
  2. מאמתים את הזהות של השולח כדי לבצע אימות באמצעות הדומיין או כתובת האימייל.
  3. מגדירים את קובצי המקור עם פרטי הכניסה ל-SMTP ושיטת השליחה, ואז פורסים את האפליקציה.
  4. בודקים את האפליקציה כדי לוודא שפונקציית האימייל פועלת.

הגדרת שירות אימייל מבוסס SMTP

מגדירים חשבון אצל ספק אימייל רגיל של צד שלישי שמשתמש ב-SMTP, כמו SendGrid, ‏ Mailgun או Mailjet, ומקבלים מהספק את הפרטים הבאים:

  • מארח SMTP: כתובת שרת ה-SMTP שמשמשת לשליחת דואר. לדוגמה, smtp.sendgrid.net או example.mailjet.com.

  • יציאה: מספר היציאה של החיבור. לדוגמה, 587 להצפנת TLS.

  • שם משתמש: שם המשתמש שלכם לכניסה ל-SMTP בחשבון.

  • סיסמה או מפתח API: הסיסמה של החשבון או מפתח API, שמשמש כסיסמה לחיבור SMTP. אצל ספקים מסוימים, כמו SendGrid, שם המשתמש הוא ערך קבוע כמו apikey, ומפתח ה-API משמש כסיסמה.

אימות הזהות של השולח

כדי למנוע ספאם, כל שירותי האימייל דורשים שתאמתו שאתם הבעלים של כתובת האימייל או הדומיין שמהם אתם שולחים אימיילים. בשלב הזה צריך בדרך כלל להוסיף פרטי DNS ספציפיים, כמו רשומות CNAME, לדף ניהול ה-DNS של מארח הדומיין.

כדי להמשיך בהגדרת האפליקציה, צריך לפעול לפי ההוראות של הספק כדי לאמת את זהות השולח.

כדי להוסיף רשומות DNS למארח הדומיין, פועלים לפי השלבים הבאים:

  1. נכנסים לחשבון בשירות של ספק ה-DNS.
  2. עוברים לדף של ניהול ה-DNS של הדומיין.
  3. מוסיפים את רשומות ה-CNAME בדיוק כמו שהן מופיעות אצל ספק שירות האימייל. לכל רשומה, מבצעים את הפעולות הבאות:

    • בשדה Name (שם) או Host (מארח), מזינים את פרטי המארח.
    • בשדה נקודות או ערך, מזינים את הערך.

יכול להיות שיעברו כמה שעות עד שהשינויים ב-DNS ייכנסו לתוקף. אם האימות נכשל, כדאי לחכות קצת ולנסות שוב.

הגדרת קובצי המקור

כדי לכלול את הפונקציונליות של SMTP, פועלים לפי השלבים הבאים:

  1. מריצים את הפקודה הבאה כדי להתקין את Maven:

    sudo apt install maven
    
  2. כדי לעבור לשירות SMTP, מוסיפים את הקוד הבא לקובץ pom.xml:

    1. מוסיפים את הגרסה של יחסי התלות appengine-api-1.0-sdk:

       <dependency>
         <groupId>com.google.appengine</groupId>
         <artifactId>appengine-api-1.0-sdk</artifactId>
         <version>5.0.0</version>
       </dependency>
      
    2. מעדכנים את מזהה הפרויקט:

        <configuration>
          <deploy.projectId>PROJECT-ID</deploy.projectId>
          <deploy.version>1</deploy.version>
        </configuration>
      

      מחליפים את PROJECT-ID במזהה הפרויקט ב- Google Cloud .

  3. מוסיפים את משתני הסביבה הבאים לקובץ appengine-web.xml כדי לכלול את הגדרות שולח ה-SMTP:

    ...
    <runtime>RUNTIME</runtime>
    <service>default</service>
    <threadsafe>true</threadsafe>
    <app-engine-apis>true</app-engine-apis>
    <env-variables>
    <!-- This is the master switch to enable the SMTP service.-->
    <env-var name="APPENGINE_USE_SMTP_MAIL_SERVICE" value="true" />
    <!-- SMTP Server Configuration -->
    <!-- The server address from your mail provider.-->
    <env-var name="APPENGINE_SMTP_HOST" value="SMTP_HOST" />
    <!-- The recommended port for TLS connections. -->
    <env-var name="APPENGINE_SMTP_PORT" value="587" />
    <!-- The username for your SMTP login. -->
    <env-var name="APPENGINE_SMTP_USER" value="SMTP_USER" />
    <!-- The API key or password -->
    <env-var name="APPENGINE_SMTP_PASSWORD" value="SMTP_PASSWORD" />
    <!--  Use TLS for a secure connection. -->
    <env-var name="APPENGINE_SMTP_USE_TLS" value="true" />
    </env-variables>
    ...
    </appengine-web-app>
    

    מחליפים את מה שכתוב בשדות הבאים:

    • RUNTIME: גרסת זמן ריצה של Java נתמכת.
    • SMTP_HOST: כתובת המארח של SMTP. לדוגמה, smtp.sendgrid.net או example.mailjet.com.
    • SMTP_USER: שם המשתמש שלכם להתחברות ל-SMTP. לדוגמה, apiKey.
    • SMTP_PASSWORD: הסיסמה או מפתח ה-API שקיבלתם מספק האימייל של הצד השלישי. כדי לשפר את האבטחה, מומלץ להשתמש ב-Secret Manager כדי לאחסן את מפתח ה-API במקום להציב אותו בקובץ appengine-web.xml.
  4. מריצים את הפקודה הבאה כדי לפרוס את האפליקציה:

    mvn package appengine:deploy
    

בדיקת האפליקציה

ההעברה הצליחה אם אתם מצליחים לפרוס את האפליקציה ללא שגיאות. כדי לוודא ששירות הדואר שלכם פועל, פועלים לפי השלבים הבאים:

  1. מפעילים את החלק באפליקציה ששולח אימייל.
  2. בודקים את Logs Explorer כדי לוודא שאין שגיאות שקשורות לקריאות ל-API או לניסיון החיבור ל-SMTP.
  3. נכנסים לחשבון אצל ספק האימייל של הצד השלישי (למשל Mailgun,‏ Mailjet,‏ SendGrid) ובודקים את פיד הפעילות, היומנים או מרכז הבקרה של המשלוחים. האימייל לבדיקה אמור להופיע בפיד עם סטטוס מסירה שמסומן כProcessed, Delivered או דומה.

המאמרים הבאים