本教程介绍如何使用 SendGrid 从 Compute Engine 虚拟机 (VM) 实例上运行的应用发送电子邮件。
目标
- 在 Compute Engine 实例上通过 Postfix 使用 SendGrid。
- 在 Compute Engine 实例上运行的 Java 代码中使用 SendGrid。
- 在 Compute Engine 实例上运行的 Node.js 代码中使用 SendGrid。
- 将 CompedGrid 与 Compute Engine 实例上的 Microsoft Exchange 边缘传输服务器配合使用。
如需详细了解如何设置 SendGrid,请参阅 SendGrid 开发者文档。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Compute Engine
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- In the Google Cloud console, go to the Create an instance page.
-
Set Name to
sendgrid-tutorial
. - In the Boot disk section, click Change to begin configuring your boot disk.
- 在 Public images 标签页上,选择 a Debian or CentOS image version。
- 点击选择。
- 如需创建虚拟机,请点击创建。
-
使用 Google Cloud Marketplace 注册 SendGrid 电子邮件服务。记下您的 SendGrid SMTP 账号凭据,其中包括用户名、密码和主机名。您的 SMTP 用户名和密码与您注册该服务时使用的相同。SendGrid 主机名为
smtp.sendgrid.net
。 - 创建 API 密钥:
- 登录到 SendGrid 并转到设置 > API 密钥。
- 创建 API 密钥。
- 为该密钥选择权限。该密钥必须至少具有邮件发送权限才能发送电子邮件。
- 点击保存以创建该密钥。
- SendGrid 会生成一个新的密钥。这是该密钥的唯一副本,因此请务必复制并保存该密钥以供日后使用。
使用 Postfix 从实例发送邮件
完成以下步骤以连接到您的 sendgrid-tutorial 实例并使用 Postfix 运行 SendGrid。
使用 SSH 连接到您的 sendgrid-tutorial 实例
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
- 在虚拟机实例列表中,点击要连接的实例所在行中的 SSH。
使用 Postfix 将 SendGrid 配置为 SMTP 中继
在 SSH 终端中运行以下命令,以使用 Postfix 将 SendGrid 用作 SMTP 中继。
成为超级用户:
sudo su -
设置安全 umask 值:
umask 077
安装 Postfix 邮件传输代理:
Debian
apt update && apt -y install postfix libsasl2-modules
CentOS
yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
如果出现提示,请选择仅限本地配置并接受默认域名。
修改 Postfix 配置选项。打开
/etc/postfix/main.cf
进行修改。例如,若要使用nano
文本编辑器,请输入以下命令:nano /etc/postfix/main.cf
更新文件:
注释掉以下几行代码:
# default_transport = error # relay_transport = error
将以下几行代码添加到文件末尾:
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 配置中的身份验证。
保存并关闭文件。
使用您在准备工作部分中生成的 API 密钥生成 SASL 密码映射。将
your-api-key
替换为您生成的 API 密钥。echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
使用
postmap
实用程序生成一个.db
文件:postmap /etc/postfix/sasl_passwd
验证您有一个
.db
文件:ls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root ... /etc/postfix/sasl_passwd -rw------- 1 root root ... /etc/postfix/sasl_passwd.db
移除包含您的凭据的文件,因为我们已不再需要它:
rm /etc/postfix/sasl_passwd
设置
.db
文件的权限并验证已移除其他文件:chmod 600 /etc/postfix/sasl_passwd.db ls -la /etc/postfix/sasl_passwd*
-rw------- 1 root root ... /etc/postfix/sasl_passwd.db
重新加载您的配置以加载修改后的参数:
Debian
/etc/init.d/postfix restart
CentOS
postfix reload
安装
mailutils
或mailx
软件包:Debian
apt -y install mailutils
CentOS
yum install mailx -y
发送测试电子邮件:
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 实例
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
- 在虚拟机实例列表中,点击要连接的实例所在行中的 SSH。
构建并发送电子邮件
以下说明利用 SendGrid Java 客户端库,通过 SendGrid 构建并发送电子邮件。您可以在 GitHub 上查看完整示例。
在您的 SSH 终端中:
成为超级用户并设置一个安全的 umask:
sudo su - umask 077
安装 Java 和 Maven:
apt -y update && apt -y install git-core openjdk-11-jdk maven
克隆 GitHub 代码库:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
转到示例的主源代码:
cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
打开
SendEmailServelet.java
进行修改。将
your-sendgrid-api-key
替换为您的 SendGrid 账号的 API 密钥。将
your-sendgrid-from-email
替换为发件人电子邮件地址。将
destination-email
替换为收件人电子邮件地址。
转到示例代码的根目录:
cd /root/java-docs-samples/compute/sendgrid
打包 Java 类:
mvn clean package
转到新的
target
目录:cd target
设置可让您执行 jar 文件的权限:
chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
运行备用 Java 版本选择器:
update-alternatives --config java
选择
java-11-openjdk-amd64
选项。执行 Java 文件:
java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
在您的实例上通过 Node.js 发送邮件
如需运行此示例,您必须在虚拟机实例上安装 Node.js
7.6 或更高版本。
使用 SSH 连接到您的 sendgrid-tutorial 实例
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
- 在虚拟机实例列表中,点击要连接的实例所在行中的 SSH。
构建并发送电子邮件
在您的 SSH 终端中:
成为超级用户并设置一个安全的 umask:
sudo su - umask 077
更新您的软件包代码库:
Debian
apt update
CentOS
yum update -y
安装 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
安装 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
安装 SendGrid Node.js 客户端:
npm install sendgrid
克隆示例代码库:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
转到包含 SendGrid 示例的目录:
cd nodejs-docs-samples/compute
复制
sendgrid.js
文件:cp sendgrid.js sendmail.js
打开
sendmail.js
进行修改。将
your-sendgrid-api-key
替换为您的 SendGrid 账号的 API 密钥。将
from-email@example.com
替换为发件人电子邮件地址。将
to-email@example.com
替换为收件人电子邮件地址。
运行该程序,通过 SendGrid 发送一封电子邮件:
node sendmail.js
从 Exchange 边缘传输服务器发送邮件
您可以通过配置出站发送连接器来将 Microsoft Exchange 设置为使用 SendGrid 发送出站电子邮件。如需了解详情,请参阅在 Compute Engine 上部署 Microsoft Exchange Server 2016。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- 在 Google Cloud 控制台中,进入管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除您的 Compute Engine 实例
如需删除 Compute Engine 实例,请执行以下操作:
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
-
选中您的
sendgrid-tutorial
实例对应的复选框。 - 如需删除实例,请点击 更多操作,点击删除,然后按照说明操作。
后续步骤
探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。