使用 Mailjet 发送电子邮件

Mailjet 是一项第三方全球电子邮件服务,该服务为 Google Compute Engine 用户提供一个免费层级,每月可免费发送 6000 封电子邮件。此外,Mailjet 还提供以下功能和特性:

  • 用于发送交易和营销电子邮件的 API、用户界面和 SMTP 中继。
  • 欧洲数据隐私合规性。
  • 电子邮件和可递送性功能,例如可自定义的优先级设置和自动限制管理。
  • Go、PHP、Nodejs、Java、Python、Ruby 版 API 资源库,用于管理子帐号、身份验证、联系人、广告、自定义负载、统计信息、实时事件以及通过 Event API 进行解析。
  • 集成的 MJML 框架,用于创建自适应 HTML 电子邮件模板。
  • 全天候提供 4 种以上语言支持。
  • 支持从 gmail.com 以外的网域发送电子邮件。

准备工作

  1. 在 Mailjet 的 Google 合作伙伴页面* 上创建一个新的 Mailjet 帐号。注册时,请提供您的发件人网域和要用于发送消息的电子邮件地址。

  2. 获取您的 Mailjet SMTP 帐号凭据

接下来,请按照下面的一些示例设置您的邮件配置。有关其他电子邮件解决方案的详尽文档,包括与大多数常见 SMTP 服务器、库和框架集成的示例,请参阅 Mailjet 的文档

使用 Postfix 配置中继

将 Mailjet 配置为邮件中继可以让 Postfix 转发远程传递的电子邮件。

  1. 使用 SSH 连接到您的实例:

    gcloud compute ssh INSTANCE
    
  2. 安装 Postfix 邮件传输代理。出现提示时,请接受默认的域名选项,但选择 Local Only 配置。

    Debian


    user@test-instance:~# sudo apt-get update && sudo apt-get install postfix libsasl2-modules -y
    

    CentOS


    user@test-instance:~# sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
    

  3. 修改 Postfix 配置选项。Postfix 配置选项在 main.cf 文件中设置。使用您所选的文本编辑器打开该文件:

    user@test-instance:~# sudo vi /etc/postfix/main.cf
    
  4. 如果文件中存在以下几行内容,请将其注释掉:

    # default_transport = error
    # relay_transport = error
    
  5. 将以下配置行加到文件最后,添加 Mailjet SMTP 服务:

    relayhost = in.mailjet.com:2525
    
  6. 接下来,添加以下配置行,以强制支持 SSL/TLS 并为这些类型的请求配置 SMTP 身份验证功能。简单的访问和安全层 (SASL) 模块负责处理 Postfix 配置中的身份验证。将以下配置行加到文件最后:

    smtp_tls_security_level = encrypt
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    

    保存更改并关闭该文件。

  7. 使用您所选的文本编辑器创建 SASL 密码映射:

    user@test-instance:~# sudo vi /etc/postfix/sasl_passwd
    
  8. sasl_passwd 文件中添加以下配置行,为 Mailjet 提供凭据:

    in.mailjet.com:2525 YOUR_SMTP_KEY:YOUR_SMTP_SECRET
    
  9. 使用 postmap 实用程序生成一个 .db 文件:

    user@test-instance:~# sudo postmap /etc/postfix/sasl_passwd
    user@test-instance:~# sudo ls -l /etc/postfix/sasl_passwd*
    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  10. 接下来,移除包含您的凭据的文件,因为我们已不再需要该文件了:

    user@test-instance:~# sudo rm /etc/postfix/sasl_passwd
    
  11. 设置您的 .db 文件的权限:

    user@test-instance:~# sudo chmod 600 /etc/postfix/sasl_passwd.db
    user@test-instance:~# sudo ls -la /etc/postfix/sasl_passwd.db
    -rw------- 1 root root 12288 Aug 31 18:51 /etc/postfix/sasl_passwd.db
    
  12. 最后,重新加载您的配置以加载修改后的参数:

    Debian


    user@test-wheezy:~# sudo /etc/init.d/postfix restart
    

    CentOS


    [user@test-centos ~]# sudo postfix reload
    

  13. 测试您的配置。安装 mailxmailutils 软件包并测试您的配置。

    Debian


    user@test-wheezy:~# sudo apt-get install mailutils -y
    

    CentOS


    [user@test-centos ~]# sudo yum install mailx -y
    

    发送一条测试消息:

     user@test-instance:~# echo 'Test passed.' | mail -s Test-Email EMAIL@EXAMPLE.COM
    

    在系统日志中查找包含 status 和表示成功的服务器响应代码 (250) 的状态行:

    Debian


    user@test-wheezy:~# sudo tail -n 5 /var/log/syslog
    

    CentOS


    [user@test-centos ~]# sudo tail -n 5 /var/log/maillog
    

如果您在使用 Mailjet 设置 Postfix 时遇到问题,请参阅 Mailjet Postfix 设置说明

使用 Java 发送邮件

Debian
  1. 使用 SSH 连接到您的实例:
    gcloud compute ssh [INSTANCE_NAME]
  2. 更新您的软件包代码库并安装所需的软件包:
    user@test-instance:~# sudo apt-get update && sudo apt-get install git-core openjdk-8-jdk maven
  3. 从 GitHub 克隆 Java 代码库:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. 转到本示例的主要源代码所在的目录,位于:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. 配置您的 Mailjet 设置,并替换以下变量:

    • YOUR-MAILJET-API-KEY 替换为您的 Mailjet 帐号的 API 密钥
    • YOUR-MAILJET-SECRET-KEY 替换为您的 Mailjet 帐号的对应密钥

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException, MailjetSocketTimeoutException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        MailjetClient client = new MailjetClient(
            mailjetApiKey, mailjetSecretKey, new ClientOptions("v3.1"));
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
            throws MailjetException, MailjetSocketTimeoutException {
        MailjetRequest email = new MailjetRequest(Emailv31.resource)
            .property(Emailv31.MESSAGES, new JSONArray()
            .put(new JSONObject()
              .put(Emailv31.Message.FROM, new JSONObject()
                .put("Email", sender)
                .put("Name", "pandora"))
              .put(Emailv31.Message.TO, new JSONArray()
                .put(new JSONObject()
                  .put("Email", recipient)))
              .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
              .put(Emailv31.Message.TEXTPART,
                  "Dear passenger, welcome to Mailjet! May the delivery force be with you!")
              .put(Emailv31.Message.HTMLPART,
                  "<h3>Dear passenger, welcome to Mailjet!</h3>"
                  + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. mailjet 目录中,使用 Maven 将类打包为一个 JAR 文件:
    user@test-instance:~# mvn clean package
  7. 确保您使用的是 OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. 要发送电子邮件,请用您的收件人和发件人电子邮件地址作为参数,从打包目标目录运行此 JAR 文件:
    user@test-instance:~# java -jar compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar [RECIPIENT_EMAIL] [SENDER_EMAIL]
CentOS
  1. 使用 SSH 连接到您的实例:
    gcloud compute ssh [INSTANCE_NAME]
  2. 更新您的软件包代码库并安装所需的软件包:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. 从 GitHub 克隆 Java 代码库:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. 转到本示例的主要源代码所在的目录,位于:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. 配置您的 Mailjet 设置,并替换以下变量:

    • YOUR-MAILJET-API-KEY 替换为您的 Mailjet 帐号的 API 密钥
    • YOUR-MAILJET-SECRET-KEY 替换为您的 Mailjet 帐号的对应密钥

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException, MailjetSocketTimeoutException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        MailjetClient client = new MailjetClient(
            mailjetApiKey, mailjetSecretKey, new ClientOptions("v3.1"));
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
            throws MailjetException, MailjetSocketTimeoutException {
        MailjetRequest email = new MailjetRequest(Emailv31.resource)
            .property(Emailv31.MESSAGES, new JSONArray()
            .put(new JSONObject()
              .put(Emailv31.Message.FROM, new JSONObject()
                .put("Email", sender)
                .put("Name", "pandora"))
              .put(Emailv31.Message.TO, new JSONArray()
                .put(new JSONObject()
                  .put("Email", recipient)))
              .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
              .put(Emailv31.Message.TEXTPART,
                  "Dear passenger, welcome to Mailjet! May the delivery force be with you!")
              .put(Emailv31.Message.HTMLPART,
                  "<h3>Dear passenger, welcome to Mailjet!</h3>"
                  + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. mailjet 目录中,使用 Maven 将类打包为一个 JAR 文件:
    user@test-centos:~# mvn clean package
  7. 确保您使用的是 OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. 要发送电子邮件,请用您的收件人和发件人电子邮件地址作为参数,从打包目标目录运行此 JAR 文件:
    user@test-centos:~# java -jar compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar [RECIPIENT_EMAIL] [SENDER_EMAIL]

使用 Node.js 发送邮件

以下说明将介绍如何在 Debian Wheezy 上通过 Node.js 来使用 Mailjet。

Debian
  1. 使用 SSH 连接到您的实例:
    gcloud compute ssh [INSTANCE_NAME]
  2. 更新您的软件包代码库:
    user@test-wheezy:~# sudo apt-get update
  3. 安装 Node.js 依赖项:
    user@test-wheezy:~# sudo apt-get install git-core curl build-essential openssl libssl-dev -y
  4. 从 GitHub 克隆 Node.js 代码库:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. 将当前目录切换到 Node.js 源代码树:
    user@test-wheezy:~# cd node
  6. 为此操作系统和虚拟机配置节点软件:
    user@test-wheezy:~# ./configure
  7. 构建 Node.js、npm 和相关对象:
    user@test-wheezy:~# sudo make

    这可能需要几分钟时间才能完成。

  8. 在默认位置安装 Node.js、npm 和其他软件:
    user@test-wheezy:~# sudo make install
  9. 安装 mailer 软件包:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. node 目录中,创建一个名为 sendmail.js 的新文件,其中包含以下 JavaScript 代码:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
  11. 执行该程序,通过 Mailjet 发送一封电子邮件:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. 使用 SSH 连接到您的实例:
    gcloud compute ssh [INSTANCE_NAME]
  2. 更新软件包代码库:
    user@test-centos:~# sudo yum update -y
  3. 安装 Node.js 依赖项:
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. 从 GitHub 克隆 Node.js 代码库:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. 将当前目录切换到 Node.js 源代码树:
    user@test-centos:~# cd node
  6. 为此操作系统和虚拟机配置节点软件:
    user@test-centos:~# ./configure
  7. 构建 Node.js、npm 和相关对象:
    user@test-centos:~# sudo make

    这可能需要几分钟时间才能完成。

  8. 在默认位置安装 Node.js、npm 和其他软件:
    user@test-centos:~# sudo make install
  9. 安装 mailer 软件包:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. node 目录中,创建一个名为 sendmail.js 的新文件,其中包含以下 JavaScript 代码:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
  11. 执行该程序,通过 Mailjet 发送一封电子邮件:
    user@test-centos:~# node sendmail.js

Mailjet SMTP 设置

以下是专门适用于 Mailjet 的 SMTP 设置的快速参考信息,这些设置用于配置客户端:

  • 主机:in.mailjet.com
  • 端口:2525

* Google 会因为客户注册非免费帐号而获得报酬。

根据您自己的情况试用其他 Google Cloud Platform 功能。查阅我们的教程

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档