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

במדריך הזה נסביר איך להשתמש ב-SendGrid כדי לשלוח אימייל מאפליקציה שפועלת במכונה וירטואלית (VM) של Compute Engine.

מטרות

  • שימוש ב-SendGrid עם Postfix במכונה של Compute Engine.
  • שימוש ב-SendGrid בקוד Java שפועל במכונה של Compute Engine.
  • שימוש ב-SendGrid בקוד Node.js שפועל במכונה של Compute Engine.
  • שימוש ב-SendGrid עם שרת תעבורה של Microsoft Exchange edge במכונה של Compute Engine.

מידע נוסף על הגדרת SendGrid זמין במסמכי המפתחים של SendGrid.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

  • Compute Engine

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. נכנסים לדף Create an instance במסוף Google Cloud .

    כניסה לדף Create an instance

  7. מגדירים את Name לערך sendgrid-tutorial.
  8. בקטע OS and Storage לוחצים על Change כדי להתחיל בהגדרת דיסק האתחול.
  9. בכרטיסייה תמונות ציבוריות, בוחרים גרסת תמונה של Debian או CentOS.
  10. לוחצים על בחירה.
  11. כדי ליצור את המכונה הווירטואלית (VM), לוחצים על האפשרות Create.
  12. להירשם לשירות האימייל SendGrid דרך Google Cloud Marketplace. חשוב לשמור את פרטי הכניסה לחשבון SendGrid SMTP, כולל שם המשתמש, הסיסמה ושם המארח. שם המשתמש והסיסמה שלכם ב-SMTP זהים לאלה שבהם השתמשתם כשנרשמתם לשירות. שם המארח של SendGrid הוא smtp.sendgrid.net.
  13. יוצרים מפתח API:
    1. נכנסים ל-SendGrid ועוברים אל Settings (הגדרות) > API Keys (מפתחות API).
    2. יוצרים מפתח API.
    3. בוחרים את ההרשאות של המפתח. לפחות הרשאת שליחת אימייל צריכה להיות מוגדרת למפתח כדי לשלוח אימייל.
    4. לוחצים על שמירה כדי ליצור את המפתח.
    5. המערכת של SendGrid יוצרת מפתח חדש. זהו העותק היחיד של המפתח, לכן חשוב להעתיק אותו ולשמור אותו לשימוש מאוחר יותר.

שליחת דואר מהמופע באמצעות Postfix

כדי להתחבר למופע sendgrid-tutorial ולהפעיל את SendGrid עם Postfix, צריך לבצע את השלבים הבאים.

מתחברים למכונה sendgrid-tutorial באמצעות SSH

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.

הגדרת SendGrid כשרת SMTP עם Postfix

מריצים את הפקודות הבאות בטרמינל SSH כדי להשתמש ב-SendGrid כשרת SMTP עם Postfix.

  1. להפוך למשתמש על:

    sudo su -
    
  2. הגדרת umask בטוח:

    umask 077
    
  3. מתקינים את סוכן העברת האימייל Postfix:

    Debian

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

    CentOS

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

    אם מוצגת בקשה, בוחרים בהגדרה Local Only (מקומי בלבד) ומאשרים את שם הדומיין שמוגדר כברירת מחדל.

  4. משנים את אפשרויות ההגדרה של Postfix. פותחים את /etc/postfix/main.cf לעריכה. לדוגמה, כדי להשתמש בעורך הטקסט nano, מזינים את הפקודה הבאה:

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

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

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

      relayhost = [smtp.sendgrid.net]:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      header_size_limit = 4096000
      smtp_sasl_security_options = noanonymous
      

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

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

  7. יוצרים את מפת הסיסמאות של SASL באמצעות מפתח ה-API שיצרתם בקטע לפני שמתחילים. מחליפים את your-api-key במפתח ה-API שיצרתם.

    echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
  8. משתמשים בכלי postmap כדי ליצור קובץ .db:

    postmap /etc/postfix/sasl_passwd
    
  9. מוודאים שיש לכם קובץ .db:

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. מסירים את הקובץ שמכיל את פרטי הכניסה כי הוא כבר לא נחוץ:

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

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. טוענים מחדש את ההגדרות כדי לטעון את הפרמטרים ששונו:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. מתקינים את החבילה mailutils או mailx:

    Debian

    apt -y install mailutils

    CentOS

    yum install mailx -y
    

  14. שולחים אימייל לבדיקה:

    echo 'message' | mail -s subject email@example.com

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

    • message: תוכן האימייל.
    • subject: נושא האימייל.
    • email@example.com: כתובת האימייל שאליה רוצים לשלוח הודעה.

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

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

שליחת אימייל באמצעות Java במופע

מתחברים למכונה sendgrid-tutorial באמצעות SSH

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.

איך כותבים ושולחים הודעת אימייל

ההוראות הבאות מתייחסות לשימוש ב-Java client library של SendGrid כדי ליצור ולשלוח הודעת אימייל דרך SendGrid. אפשר לראות את הדוגמה המלאה ב-GitHub.

בטרמינל ה-SSH:

  1. הופכים למשתמש על ומגדירים umask בטוח:

    sudo su -
    umask 077
    
  2. מתקינים Java ו-Maven:

    apt -y update && apt -y install git-core openjdk-11-jdk maven
    
  3. משכפלים את מאגר GitHub:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. עוברים לקוד המקור הראשי של הדוגמה:

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. פותחים את SendEmailServelet.java לעריכה.

    • מחליפים את הערך your-sendgrid-api-key במפתח ה-API של חשבון SendGrid.

    • מחליפים את your-sendgrid-from-email בכתובת האימייל שממנה רוצים לשלוח את ההודעה.

    • מחליפים את destination-email בכתובת האימייל שאליה רוצים לשלוח את ההודעה.

  6. עוברים לספריית הבסיס של הקוד לדוגמה:

    cd /root/java-docs-samples/compute/sendgrid
    
  7. אורזים את מחלקת Java:

    mvn clean package
    
  8. עוברים לספרייה החדשה של target:

    cd target
    
  9. מגדירים הרשאות שמאפשרות להריץ את קובץ ה-JAR:

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. מריצים את בורר הגרסאות החלופיות של Java:

    update-alternatives --config java
    

    בוחרים באפשרות java-11-openjdk-amd64.

  11. מריצים את קובץ ה-Java:

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

שליחת אימייל באמצעות Node.js במופע

כדי להריץ את הדוגמה הזו, צריך להתקין את Node.js בגרסה 7.6 ואילך במכונה הווירטואלית.

מתחברים למכונה sendgrid-tutorial באמצעות SSH

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.

איך כותבים ושולחים הודעת אימייל

בטרמינל ה-SSH:

  1. הופכים למשתמש על ומגדירים umask בטוח:

    sudo su -
    umask 077
    
  2. מעדכנים את מאגרי החבילות:

    Debian

    apt update
    

    CentOS

    yum update -y
    

  3. מתקינים את יחסי התלות של Node.js:

    Debian

    apt -y install git-core curl build-essential openssl libssl-dev
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. מתקינים את Node.js. כברירת מחדל, ההתקנה כוללת גם את npm:

    Debian

    curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
    sudo apt -y install nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_14.x | bash -
    

    לאחר מכן, מתקינים את Node.js:

    yum -y install nodejs
    

  5. מתקינים את לקוח Node.js של SendGrid:

    npm install sendgrid
    
  6. משכפלים את המאגר לדוגמה:

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  7. עוברים לספרייה שמכילה את הדוגמה של SendGrid:

    cd nodejs-docs-samples/compute
    
  8. מעתיקים את הקובץ sendgrid.js:

    cp sendgrid.js sendmail.js
    
  9. פותחים את sendmail.js לעריכה.

    • מחליפים את הערך your-sendgrid-api-key במפתח ה-API של חשבון SendGrid.

    • מחליפים את from-email@example.com בכתובת האימייל שממנה רוצים לשלוח אימייל.

    • מחליפים את to-email@example.com בכתובת האימייל שאליה רוצים לשלוח אימייל.

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text: 'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. מריצים את התוכנית כדי לשלוח הודעת אימייל דרך SendGrid:

    node sendmail.js
    

שליחת אימייל משרת Exchange Edge Transport

אתם יכולים להגדיר את Microsoft Exchange לשליחת אימייל יוצא באמצעות SendGrid על ידי הגדרת מחבר לשליחה יוצאת. פרטים נוספים זמינים במאמר בנושא פריסת Microsoft Exchange Server 2016 ב-Compute Engine.

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת מכונה של Compute Engine

כדי למחוק מכונה של Compute Engine:

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. מסמנים את התיבה sendgrid-tutorial ליד המכונה.
  3. כדי למחוק את המכונה, לוחצים על More actions ואז על Delete ופועלים לפי ההוראות.

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

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