שליחת אימייל באמצעות Mailjet

Mailjet הוא שירות אימייל גלובלי של צד שלישי שמציע למשתמשי Compute Engine רמה חינמית עם 6,000 אימיילים בכל חודש. בנוסף, Mailjet מציעה גם:

  • ‫API, ממשק משתמש ושרת SMTP לשליחת אימיילים טרנזקציוניים ושיווקיים.
  • עמידה בדרישות של תקנות פרטיות הנתונים באירופה.
  • תכונות שקשורות לאימייל ולמסירה, כמו הגדרות עדיפות שניתנות להתאמה אישית וניהול אוטומטי של הגבלת קצב השליחה.
  • ספריית משאבי API ב-Go,‏ PHP,‏ Nodejs,‏ Java,‏ Python ו-Ruby לניהול חשבונות משנה, אימות, אנשי קשר, קמפיינים, מטענים ייעודיים (payload) בהתאמה אישית, נתונים סטטיסטיים, אירועים בזמן אמת וניתוח באמצעות Event API.
  • מסגרת MJML משולבת ליצירת תבניות אימייל רספונסיביות בפורמט HTML.
  • תמיכה מסביב לשעון ב-4 שפות לפחות.
  • אפשרות לשלוח הודעות אימייל מדומיינים אחרים מלבד gmail.com.

במאמר הזה מוסבר איך להגדיר את מכונת ה-VM לשליחת אימייל דרך Mailjet באמצעות השיטות הבאות:

  • דרך ממסר SMTP עם:
  • ישירות דרך Mailjet API באמצעות Java

לעיון במסמכים מפורטים על פתרונות אחרים לאימייל, כולל דוגמאות לשילוב עם שרתי SMTP, ספריות ומסגרות נפוצים, אפשר לעיין במסמכים של Mailjet.

לפני שמתחילים

  1. יוצרים חשבון Mailjet חדש בדף השותף של Mailjet ב-Google*. במהלך ההרשמה, צריך לספק את הדומיין ואת כתובת האימייל שמהם רוצים לשלוח הודעות אימייל.

  2. איך מקבלים את פרטי הכניסה לחשבון SMTP ב-Mailjet

  3. מוודאים שכתובת האימייל שממנה רוצים לשלוח אימיילים אומתה.

  4. מגדירים כלל חומת אש כדי לאפשר תעבורת נתונים מסוג TCP ביציאה 2525.

* Google מקבלת תשלום על לקוחות שנרשמים לחשבון בתשלום.

הגדרת Mailjet כשרת ממסר SMTP

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

שימוש ב-Postfix

  1. מתחברים ל-VM באמצעות SSH, ומחליפים את instance-name בשם המופע שממנו רוצים לשלוח הודעות אימייל:

    gcloud compute ssh instance-name
  2. ב-VM, מתקינים את Postfix Mail Transport Agent. כשמוצגת בקשה, מאשרים את ברירות המחדל לשמות הדומיינים ובוחרים את ההגדרה Local Only.

    Debian

    sudo apt update && sudo apt -y install postfix libsasl2-modules
    

    CentOS

    sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
    

  3. משנים את אפשרויות ההגדרה של Postfix. אפשרויות ההגדרה של Postfix מוגדרות בקובץ main.cf. פותחים את הקובץ בכלי לעריכת טקסט לפי בחירה:

    sudo vi /etc/postfix/main.cf
    
  4. מעדכנים את הקובץ:

    1. מוסיפים הערה לשורות הבאות:

      # default_transport = error
      # relay_transport = error
      
    2. מוסיפים את השורות הבאות לסוף הקובץ:

      relayhost = in-v3.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

      השורות האלה אוכפות תמיכה ב-SSL/TLS ומגדירות אימות SMTP לבקשות האלה. מודול פשוט של שכבת גישה ואבטחה (SASL) מטפל באימות בהגדרת Postfix.

    3. שומרים את השינויים וסוגרים את הקובץ.

  5. יוצרים את מיפוי הסיסמאות של SASL באמצעות עורך הטקסט שבחרתם:

    sudo vi /etc/postfix/sasl_passwd
    
  6. מוסיפים את השורות הבאות לקובץ sasl_passwd כדי לספק את פרטי הכניסה של Mailjet:

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. משתמשים בכלי postmap כדי ליצור קובץ .db:

    sudo postmap /etc/postfix/sasl_passwd
    sudo ls -l /etc/postfix/sasl_passwd*
    

    אמורה להתקבל התגובה הבאה:

    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  8. לאחר מכן, מסירים את הקובץ שמכיל את פרטי הכניסה כי הוא כבר לא נחוץ:

    sudo rm /etc/postfix/sasl_passwd
    
  9. מגדירים את ההרשאות בקובץ .db:

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. לבסוף, טוענים מחדש את ההגדרה כדי לטעון את הפרמטרים ששונו:

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. בודקים את ההגדרה. מתקינים את החבילה mailx או mailutils ובודקים את ההגדרה.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    שליחת הודעת בדיקה:

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

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

    • from-email: כתובת אימייל שאומתה.
    • destination-email: הכתובת שאליה תישלח הודעת האימייל.

    מחפשים ביומנים של המערכת שורת סטטוס שמכילה את status ואת קוד התגובה של השרת (250):

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

אם נתקלתם בבעיות בהגדרת Postfix עם Mailjet, תוכלו להיעזר בהוראות ההגדרה של Mailjet Postfix.

שימוש ב-Nodemailer

בהוראות הבאות מוסבר איך להשתמש ב-Mailjet עם Node.js ב-Debian Wheezy.

Debian
  1. מתחברים למופע באמצעות SSH:
    gcloud compute ssh instance-name
  2. מעדכנים את מאגרי החבילות:
    user@test-wheezy:~# sudo apt update
  3. מתקינים את יחסי התלות של Node.js:
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. משכפלים את מאגר Node.js מ-GitHub:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. משנים את הספרייה לעץ המקור של Node.js:
    user@test-wheezy:~# cd node
  6. מגדירים את תוכנת הצומת למערכת ההפעלה ולמכונה הווירטואלית:
    user@test-wheezy:~# ./configure
  7. בניית Node.js,‏ npm ואובייקטים קשורים:
    user@test-wheezy:~# sudo make

    הפעולה עשויה להימשך כמה דקות.

  8. מתקינים את Node.js,‏ npm ותוכנות אחרות במיקום ברירת המחדל:
    user@test-wheezy:~# sudo make install
  9. מתקינים את חבילת כלי השליחה:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. בספרייה node, יוצרים קובץ חדש בשם sendmail.js שמכיל את קוד ה-JavaScript הבא:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. מריצים את התוכנית כדי לשלוח הודעת אימייל דרך Mailjet:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. מתחברים למופע באמצעות SSH:
    gcloud compute ssh instance-name
  2. מעדכנים את מאגרי החבילות:
    user@test-centos:~# sudo yum update -y
  3. מתקינים את יחסי התלות של Node.js:
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. משכפלים את מאגר Node.js מ-GitHub:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. משנים את הספרייה לעץ המקור של Node.js:
    user@test-centos:~# cd node
  6. מגדירים את תוכנת הצומת למערכת ההפעלה ולמכונה הווירטואלית:
    user@test-centos:~# ./configure
  7. בניית Node.js,‏ npm ואובייקטים קשורים:
    user@test-centos:~# sudo make

    הפעולה עשויה להימשך כמה דקות.

  8. מתקינים את Node.js,‏ npm ותוכנות אחרות במיקום ברירת המחדל:
    user@test-centos:~# sudo make install
  9. מתקינים את חבילת כלי השליחה:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. בספרייה node, יוצרים קובץ חדש בשם sendmail.js שמכיל את קוד ה-JavaScript הבא:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. מריצים את התוכנית כדי לשלוח הודעת אימייל דרך Mailjet:
    user@test-centos:~# node sendmail.js

שליחת דואר דרך Mailjet API באמצעות Java

דוגמאות נוספות לשימוש ב-Mailjet API זמינות בתיעוד הרשמי של Mailjet.

Debian
  1. מתחברים למופע באמצעות SSH:
    gcloud compute ssh instance-name
  2. מעדכנים את מאגרי החבילות ומתקינים את החבילות הנדרשות:
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. משכפלים את מאגר Java מ-GitHub:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. עוברים לקוד המקור הראשי של הדוגמה, שנמצא בכתובת:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. קובעים את ההגדרות של Mailjet. אפשר לעיין במסמכי האימות של Mailjet כדי להבין איך להחליף את המשתנים הבאים:

    • your-mailjet-api-key: מפתח API לחשבון Mailjet.
    • your-mailjet-secret-key: המפתח הסודי התואם לחשבון Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. מהספרייה mailjet, משתמשים ב-Maven כדי לארוז את המחלקה כקובץ JAR:
    user@test-instance:~# mvn clean package
  7. מוודאים שמשתמשים ב-OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. כדי לשלוח אימייל: בספריית היעד, מריצים את קובץ ה-JAR עם כתובות האימייל של הנמען והשולח כארגומנטים:
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. מתחברים למופע באמצעות SSH:
    gcloud compute ssh instance-name
  2. מעדכנים את מאגרי החבילות ומתקינים את החבילות הנדרשות:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. משכפלים את מאגר Java מ-GitHub:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. עוברים לקוד המקור הראשי של הדוגמה, שנמצא בכתובת:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. קובעים את ההגדרות של Mailjet. למידע על החלפת המשתנים הבאים, אפשר לעיין במסמכי האימות של Mailjet:

    • your-mailjet-api-key: מפתח API לחשבון Mailjet.
    • your-mailjet-secret-key: המפתח הסודי התואם לחשבון Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. מהספרייה mailjet, משתמשים ב-Maven כדי לארוז את המחלקה כקובץ JAR:
    user@test-centos:~# mvn clean package
  7. מוודאים שמשתמשים ב-OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. כדי לשלוח אימייל, מריצים את קובץ ה-JAR מהספרייה של היעד עם כתובות האימייל של הנמען והשולח כארגומנטים:
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

הגדרות SMTP של Mailjet

בהמשך מופיעה רשימה של הגדרות SMTP ספציפיות ל-Mailjet שמשמשות להגדרת לקוחות:

  • מארח: in-v3.mailjet.com
  • יציאה: 2525

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

כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.