本教程介绍如何使用 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
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your 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 实例
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
使用 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 实例
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
构建并发送电子邮件
以下说明利用 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 实例
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
构建并发送电子邮件
在您的 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 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除您的 Compute Engine 实例
如需删除 Compute Engine 实例,请执行以下操作:
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
sendgrid-tutorial
instance. - To delete the instance, click More actions, click Delete, and then follow the instructions.
后续步骤
探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud 架构中心。