使用 SendGrid 傳送電子郵件

本教學課程說明如何使用 SendGrid 透過 Compute Engine 執行個體上執行的應用程式傳送電子郵件。SendGrid 是一種第三方電子郵件服務,Compute Engine 使用者每月可使用此服務免費傳送 12,000 封電子郵件。

目標

  • 在 Compute Engine 執行個體上搭配 Postfix 使用 SendGrid。
  • 在 Compute Engine 執行個體上執行的 Java 程式碼中使用 SendGrid。
  • 在 Compute Engine 執行個體上執行的 Node.js 程式碼中使用 SendGrid。

費用

本教學課程會使用包括 Google Compute Engine 在內的 Cloud Platform 可計費元件。

Cloud Platform 的新使用者可能會符合免費試用的申請資格。

事前準備

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 選取或建立 Google Cloud Platform 專案。

    前往「Manage resources」(管理資源) 頁面

  3. 請確認您已啟用 Google Cloud Platform 專案的計費功能。

    瞭解如何啟用計費功能

  4. 在 GCP 主控台中,前往「VM Instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  5. 按一下 [建立執行個體]
  6. 將「Name」(名稱) 設為 sendgrid-tutorial
  7. 在「Boot disk」(開機磁碟) 部分中,按一下 [Change] (變更) 即可開始設定開機磁碟。
  8. OS 映像檔分頁中,選擇 a Debian or CentOS image

  9. 按一下 [選取]
  10. 按一下 [Create] (建立) 來建立執行個體。
  11. 使用 Google Cloud Platform Marketplace 申請 SendGrid Email 服務。請記下您的 SendGrid SMTP 帳戶憑證,包括使用者名稱、密碼和主機名稱。您的 SMTP 使用者名稱和密碼,即是註冊服務時所用的使用者名稱和密碼。SendGrid 主機名稱為 smtp.sendgrid.net。
  12. 建立 API 金鑰:
    1. 登入 Sendgrid,並前往 [Settings] (設定) > [API Keys] (API 金鑰)。
    2. 建立 API 金鑰。
    3. 選取金鑰的權限。金鑰至少需要具備「Mail send」權限,方可傳送電子郵件。
    4. 按一下 [Save] 建立金鑰。
    5. SendGrid 會產生一個新金鑰。此為唯一一份金鑰,因此請務必複製並儲存金鑰,以供日後使用。

在執行個體上使用 Postfix 傳送郵件

請按照以下步驟連線至 sendgrid-tutorial 執行個體,再以 Postfix 執行 SendGrid。

使用 SSH 連線至 sendgrid-tutorial 執行個體

在執行個體上執行 Postfix

請在 SSH 終端機中執行下列指令:

  1. 成為超級使用者:

    sudo su -
    
  2. 設定安全的 umask:

    umask 077
    
  3. 安裝 Postfix 郵件傳輸代理程式:

    Debian

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

    CentOS

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

    如果出現系統提示,請選取 [Local Only] (僅限本機) 設定並接受預設的網域名稱。

  4. 修改 Postfix 設定選項。

    1. 開啟 /etc/postfix/main.cf 進行編輯。舉例來說,如要使用 nano 文字編輯器,請輸入下列指令:

      nano /etc/postfix/main.cf
      
    2. 如果您在檔案中看到下列幾行,請將這幾行加註。

      default_transport = error
      relay_transport = error
      
      \#default_transport = error
      \#relay_transport = error
      
    3. 在檔案結尾處加入下列一行,以新增 SendGrid SMTP 服務。

      relayhost = [smtp.sendgrid.net]:2525
      
    4. 在檔案結尾處再加入下列幾行,針對以下要求強制執行安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 支援,並設定 STMP 驗證。簡單存取及安全性階層 (SASL) 模組可處理 Postfix 設定中的驗證作業。

      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
    5. 儲存並關閉檔案。

  5. 產生 SASL 密碼對應。

    • 您可以使用 SendGrid 帳戶的使用者名稱和密碼來產生 SASL 密碼對應:

       echo [smtp.sendgrid.net]:2525 [YOUR_SMTP_LOGIN]:[YOUR_SMTP_PASSWORD] >> /etc/postfix/sasl_passwd
      

      其中:

      • [YOUR_SMTP_LOGIN] 是您的 SendGrid 使用者名稱。
      • [YOUR_SMTP_PASSWORD] 是您的 SendGrid 密碼。
    • 或者,如果您無法取得 SendGrid 帳戶的使用者名稱和密碼,也可以使用該帳戶產生的 API 金鑰來產生 SASL 密碼對應:

       echo [smtp.sendgrid.net]:2525 apikey:[YOUR_API_KEY] >> /etc/postfix/sasl_passwd
      

      其中 [YOUR_API_KEY] 是您在 SendGrid 帳戶上建立的 API 金鑰內容。

  6. 使用 postmap 公用程式產生 .db 檔案:

    postmap /etc/postfix/sasl_passwd
    
  7. 確認您擁有 .db 檔案:

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  8. 移除內含憑證的檔案,現在已不需要該檔案:

    rm /etc/postfix/sasl_passwd
    
  9. .db 檔案上設定權限,並確認其他檔案都已移除:

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. 重新載入設定,以載入修改後的參數:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  11. 安裝 mailutilsmailx 套件:

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  12. 傳送測試電子郵件:

    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 傳送郵件

使用 SSH 連線至 sendgrid-tutorial 執行個體

建構並傳送電子郵件

以下操作說明會使用 SendGrid Java 用戶端程式庫,透過 SendGrid 來建構和傳送電子郵件。您可在 GitHub 上檢視完整範例。

在 SSH 終端機中:

  1. 成為超級使用者並設定安全的 umask:

    sudo su -
    umask 077
    
  2. 安裝 Java 和 Maven:

    apt-get update -y && apt-get install git-core openjdk-8-jdk maven -y
    
  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 替換為您 SendGrid 帳戶的 API 金鑰

    • 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-8-openjdk-amd64 選項。

  11. 執行 Java 檔案:

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

在執行個體上透過 Node.js 傳送郵件

使用 SSH 連線至 sendgrid-tutorial 執行個體

建構並傳送電子郵件

在 SSH 終端機中:

  1. 成為超級使用者並設定安全的 umask:

    sudo su -
    umask 077
    
  2. 更新套件存放區:

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. 安裝 Node.js 依附元件:

    Debian

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

    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_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    CentOS

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

    然後再安裝 Node.js:

    yum -y install nodejs
    

  5. 安裝 SendGrid Node.js 用戶端:

    npm install sendgrid
    
  6. 複製範例存放區:

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. 前往含有 SendGrid 範例的目錄:

    cd nodejs-compute/samples
    
  8. 複製 sendgrid.js 檔案:

    cp sendgrid.js sendmail.js
    
  9. 開啟 sendmail.js 進行編輯。

    • <your-sendgrid-api-key> 替換為您 SendGrid 帳戶的 API 金鑰

    • 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().catch(console.error);

  10. 執行程式以透過 SendGrid 傳送電子郵件:

    node sendmail.js
    

清理

如何避免系統向您的 Google Cloud Platform 帳戶收取您在本教學課程中使用資源的相關費用:

刪除專案

如要避免付費,最簡單的方法就是刪除您針對教學課程建立的專案。

如何刪除專案:

  1. 前往 GCP 主控台的「Projects」(專案) 頁面。

    前往專案頁面

  2. 在專案清單中選取要刪除的專案,然後按一下 [Delete] (刪除)
  3. 在對話方塊中輸入專案 ID,按一下 [Shut down] (關閉) 即可刪除專案。

刪除 Compute Engine 執行個體

刪除 Compute Engine 執行個體:

後續步驟

歡迎親自試用其他 Google Cloud Platform 功能。請參考我們的教學課程

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件