使用 Mailjet 发送电子邮件

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

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

本文档介绍如何使用以下方法将虚拟机实例配置为通过 Mailjet 发送邮件:

  • 通过 SMTP 中继使用以下项发送:
  • 直接通过使用 Java 的 Mailjet API 发送

有关其他电子邮件解决方案的详尽文档,包括与最常见 SMTP 服务器、库和框架集成的示例,请参阅 Mailjet 的文档

准备工作

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

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

  3. 确保您要用于发送电子邮件的电子邮件地址已通过 Mailgun 验证

  4. 设置防火墙规则以允许 TCP 流量进入端口 2525。

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

将 Mailjet 配置为 SMTP 中继

将 Mailjet 配置为邮件中继,以让您将电子邮件转发至 Mailjet 进行远程传递。

使用 Postfix

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

    gcloud compute ssh [INSTANCE_NAME]
    

    其中 [INSTANCE_NAME] 是您要从中发送电子邮件的实例的名称。

  2. 在虚拟机实例上,安装 Postfix 邮件传输代理。出现提示时,请接受默认的域名选项,但选择 Local Only 配置。

    Debian


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

    CentOS


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

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

    sudo vi /etc/postfix/main.cf
    
  4. 更新文件:

    1. 注释掉以下几行代码:

      # default_transport = error
      # relay_transport = error
      
    2. 将以下几行代码添加到文件末尾:

      relayhost = in.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

      这些行强制支持 SSL/TLS 并为这些请求配置 SMTP 身份验证。由一个简单的访问和安全层 (SASL) 模块负责处理 Postfix 配置中的身份验证。

    3. 保存更改并关闭该文件。

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

    sudo vi /etc/postfix/sasl_passwd
    
  6. sasl_passwd 文件中添加以下配置行,为 Mailjet 提供凭据:

    in.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. 使用 postmap 实用程序生成一个 .db 文件:

    sudo postmap /etc/postfix/sasl_passwd
    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
    
  8. 接着,移除包含您凭据的文件,因为将不再需要该文件:

    sudo rm /etc/postfix/sasl_passwd
    
  9. 设置您 .db 文件的权限:

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. 最后,重新加载您的配置以加载修改后的参数:

    Debian


    sudo /etc/init.d/postfix restart
    

    CentOS


    sudo postfix reload
    

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

    Debian


    sudo apt-get install mailutils -y
    

    CentOS


    sudo yum install mailx -y
    

    发送一封测试邮件:

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:[FROM_EMAIL] [DESTINATION_EMAIL]
    

    其中:

    • [FROM_EMAIL] 是已通过 Mailgun 验证的电子邮件地址。
    • [DESTINATION_EMAIL] 是接收电子邮件的地址。

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

    Debian


    sudo tail -n 5 /var/log/syslog
    

    CentOS


    sudo tail -n 5 /var/log/maillog
    

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

使用 Nodemailer

以下说明将介绍如何在 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);
    }
    mailjet();
  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);
    }
    mailjet();
  11. 运行该程序,通过 Mailjet 发送一封电子邮件:
    user@test-centos:~# node sendmail.js

通过使用 Java 的 Mailjet API 发送邮件

如需查看使用 Mailjet API 的更多示例,请参阅官方 Mailjet 文档

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]

Mailjet SMTP 设置

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

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

试用其他 Google Cloud 功能。查阅我们的教程

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

发送以下问题的反馈:

此网页
Compute Engine 文档