使用 SendGrid 傳送電子郵件

App Engine 上收發電子郵件的功能。SendGrid 可改善郵件遞送能力,並讓您清楚瞭解電子郵件從應用程式傳送後的實際情形。您可以透過 SendGrid 介面或其 API,查看與郵件的開啟、點選、取消訂閱、垃圾內容報告等相關的統計資料。

定價

App Engine 客戶可透過 Google Cloud Platform 主控台申請 SendGrid Email API 方案,每月即能享有免費傳送 12,000 封電子郵件的優惠。請注意,Google 會為申請付費帳戶的客戶提供額外補償。

SendGrid 程式庫

您可以使用 SendGrid 透過 SMTP 轉發或使用 Web API 傳送電子郵件。

如要整合 SendGrid 與 App Engine 專案,請使用 SendGrid 用戶端程式庫

事前準備

如要使用 SendGrid 來傳送電子郵件:

  1. 申請 SendGrid Email API 方案
  2. 記下 Sendgrid API 金鑰。
  3. 在 Google Cloud Platform 主控台中選取或建立新的 GCP 專案,確認該專案含有 App Engine 應用程式,且計費功能已啟用:

    前往 App Engine

    如果專案含有 App Engine 應用程式且計費功能已啟用,系統就會開啟「資訊主頁」。否則,請按照提示選擇地區並啟用計費功能。
  4. app.flexible.yaml 的環境變數部分新增 SendGrid API 金鑰。

    舉例來說,請針對下方的範例程式碼新增:

    # The following env variables may contain sensitive information that grants
    # anyone access to your Sendgrid account. Do not add this file to your source
    # control.
    env_variables:
      SENDGRID_API_KEY: <your-sendgrid-api-key>
      SENDGRID_SENDER: <your-sendgrid-sender>

  5. 在應用程式的 package.json 中新增 SendGrid Node.js 用戶端程式庫。例如:
    npm install --save sendgrid

傳送郵件

您可以建立 SendGrid 執行個體,並使用該執行個體傳送電子郵件。

下列程式碼範例顯示如何傳送電子郵件以及指定一些錯誤處理機制:

'use strict';

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');

// The following environment variables are set by app.yaml (app.flexible.yaml or
// app.standard.yaml) when running on Google App Engine,
// but will need to be manually set when running locally.
const {SENDGRID_API_KEY} = process.env;
const {SENDGRID_SENDER} = process.env;
const Sendgrid = require('@sendgrid/client');

Sendgrid.setApiKey(SENDGRID_API_KEY);

const app = express();

// Setup view engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// Parse form data
app.use(bodyParser.urlencoded({extended: false}));

app.get('/', (req, res) => {
  res.render('index');
});

app.post('/hello', async (req, res, next) => {
  const request = {
    method: 'POST',
    url: '/v3/mail/send',
    body: {
      personalizations: [
        {
          to: [{email: req.body.email}],
          subject: 'Hello World!',
        },
      ],
      from: {email: SENDGRID_SENDER},
      content: [
        {
          type: 'text/plain',
          value: 'Sendgrid on Google App Engine with Node.js.',
        },
      ],
    },
  };

  try {
    await Sendgrid.request(request);
  } catch (err) {
    next(err);
    return;
  }

  // Render the index route on success
  res.render('index', {
    sent: true,
  });
});

新增個人帳戶的詳細資料,然後編輯電子郵件地址和其他電子郵件內容。

如需瞭解電子郵件設定和範例,請參閱 SendGrid-Node.js 程式庫

測試與部署

每次在本機執行應用程式時,您都需要使用指令列設定本機電腦上的環境變數。例如,對於上方的程式碼範例,請使用:

export SENDGRID_API_KEY= your-sendgrid-api-key
export SENDGRID_SENDER= your-sendgrid-sender-email-address

您可以在本機上執行應用程式,以測試回呼和簡訊傳輸功能。例如:

npm start

測試應用程式後,請將專案部署到 App Engine:

gcloud app deploy app.flexible.yaml

取得即時資訊

除了傳送電子郵件,SendGrid 還可以接收電子郵件,或透過 Webhook 掌握已傳送電子郵件的情況。

Event API

在開始透過應用程式傳送電子郵件後,您可以檢視 SendGrid 收集的統計資料,以評估您的電子郵件程式。您可以使用 Event API 來查看這些資料。舉例來說,當收件者開啟或點選電子郵件時,SendGrid 會傳送描述性 JSON 至您的 Google App Engine 應用程式,讓該應用程式回應事件,或是儲存資料以供日後使用。

請參閱 Event API 說明文件,瞭解 Webhook 的設定方式、九種事件類型,以及事件回呼中包含的欄位。

Inbound Parse API

SendGrid 可以接收電子郵件。Inbound Parse API 可用於互動式應用程式,例如自動化支援票證。

Parse API 是一種 Webhook,會在有新資料時傳送資料至您的應用程式。在這種情況下,只要有新的電子郵件抵達內送電子郵件的相關聯網域,系統就會呼叫 Webhook。

電子郵件是以 JSON 結構傳送到您的應用程式,其中寄件者、收件者、主旨和內文會在不同欄位中顯示。附件大小的上限為 20 MB。

請參閱 Parse API 說明文件瞭解詳情,包括隨每封電子郵件傳送的其他欄位,以及 DNS 設定和使用說明。

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

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

這個網頁
Node.js 適用的 App Engine 彈性環境文件