Mailjet でのメールの送信


Mailjet は、毎月 6,000 件のメール無料枠を Compute Engine ユーザーに提供する、サードパーティのグローバル メールサービスです。また、Mailjet は以下も提供しています。

  • 取引メールやマーケティング メールを送信するための API、ユーザー インターフェース、SMTP リレー
  • 欧州のデータ プライバシー コンプライアンス
  • カスタマイズ可能な優先度の設定や自動スロットル管理など、メールと到達性に関する機能
  • サブアカウント、認証、連絡先、キャンペーン、カスタム ペイロード、統計、リアルタイムのイベント、Event API を介した解析を管理するための Go、PHP、Nodejs、Java、Python、Ruby の API リソース ライブラリ
  • レスポンシブ HTML メールのテンプレートを作成するための統合 MJML フレームワーク
  • 4 種類以上の言語による 24 時間 365 日のフォローザサン サポート
  • gmail.com 以外のドメインからメールを送信する機能

このドキュメントでは、以下の方法で Mailjet を介してメールを送信するように VM インスタンスを構成する方法について説明します。

  • 次のものを使用して SMTP リレーを使用する:
  • Java を使用して Mailjet API を直接使用する

最も一般的な SMTP サーバー、ライブラリ、フレームワークとの統合の例を含む、その他のメール ソリューションに関する各種のドキュメントについては、Mailjet のドキュメントをご覧ください。

始める前に

  1. Mailjet の Google Partner ページ*で新しい Mailjet アカウントを作成します。登録時に、メール メッセージの送信元として使用するドメインとメールアドレスを指定します。

  2. Mailjet SMTP アカウントの認証情報を取得します

  3. 送信元のメールアドレスが検証済みであることを確認してください。

  4. ポート 2525 で TCP トラフィックを許可するように、ファイアウォール ルールを設定します。

* Google は、有料のアカウントに登録するお客様について、正当な対価を受け取ります。

SMTP リレーとして Mailjet を構成する

Mailjet をメールリレーとして構成すると、メール メッセージを Mailjet に転送してリモート配信できます。

Postfix の使用

  1. instance-name をメール メッセージ送信元インスタンスの名前に置き換え、SSH を使用して VM に接続します。

    gcloud compute ssh instance-name
  2. VM に Postfix Mail Transport Agent をインストールします。プロンプトが表示されたら、ドメイン名のデフォルトの選択を受け入れ、Local Only 構成を選択します。

    Debian

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

    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-v3.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 認証が構成されます。Simple Access and Security Layer(SASL)モジュールによって、Postfix の構成で認証が処理されます。

    3. 変更を保存し、ファイルを閉じます。

  5. 任意のテキスト エディタで SASL パスワード マップを作成します。

    sudo vi /etc/postfix/sasl_passwd
    
  6. sasl_passwd ファイルに次の行を追加して Mailjet の認証情報を指定します。

    in-v3.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. 構成をテストします。mailx または mailutils パッケージをインストールし、構成をテストします。

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    テスト メッセージを送信します。

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

    以下を置き換えます。

    • from-email: 検証済みのメールアドレス。
    • 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 上で Mailjet と Node.js を使用する方法について説明します。

Debian
  1. SSH を使用してインスタンスに接続します。
    gcloud compute ssh instance-name
  2. パッケージ リポジトリを更新します。
    user@test-wheezy:~# sudo apt update
  3. Node.js の依存関係をインストールします。
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. GitHub から Node.js リポジトリのクローンを作成します。
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Node.js ソースツリーのディレクトリに移動します。
    user@test-wheezy:~# cd node
  6. この OS と仮想マシンのノード ソフトウェアを構成します。
    user@test-wheezy:~# ./configure
  7. Node.js、npm、関連オブジェクトをビルドします。
    user@test-wheezy:~# sudo make

    処理が完了するまで数分かかることがあります。

  8. Node.js、npm、その他のソフトウェアをデフォルトの場所にインストールします。
    user@test-wheezy:~# sudo make install
  9. メーラー パッケージをインストールします。
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. node ディレクトリ内に、次の JavaScript を含む、sendmail.js という名前の新しいファイルを作成します。
    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. この OS と仮想マシンのノード ソフトウェアを構成します。
    user@test-centos:~# ./configure
  7. Node.js、npm、関連オブジェクトをビルドします。
    user@test-centos:~# sudo make

    処理が完了するまで数分かかることがあります。

  8. Node.js、npm、その他のソフトウェアをデフォルトの場所にインストールします。
    user@test-centos:~# sudo make install
  9. メーラー パッケージをインストールします。
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. node ディレクトリ内に、次の JavaScript を含む、sendmail.js という名前の新しいファイルを作成します。
    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 update && sudo apt 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 の設定を構成します。次の変数を置き換える方法については、Mailjet の認証のドキュメントをご覧ください。

    • your-mailjet-api-key: Mailjet アカウントの API キー。
    • your-mailjet-secret-key: Mailjet アカウントに対応する秘密鍵。

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        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 の設定を構成します。次の変数を置き換える方法については、Mailjet の認証のドキュメントをご覧ください。

    • your-mailjet-api-key: Mailjet アカウントの API キー。
    • your-mailjet-secret-key: Mailjet アカウントに対応する秘密鍵。

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        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-v3.mailjet.com
  • ポート: 2525

次のステップ

Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。