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 パートナー ページ*で新しい Mailjet アカウントを作成します。登録時に、メール メッセージの送信元として使用するドメインとメールアドレスを指定します。

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

  3. メールを送信するメールアドレスが Mailgun によって検証されていることを確認します。

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

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

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

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

Postfix の使用

  1. SSH を使用してインスタンスに接続します。

    gcloud compute ssh [INSTANCE_NAME]
    

    [INSTANCE_NAME] は、メールの送信元となるインスタンスの名前。

  2. VM インスタンスに Postfix Mail Transport Agent をインストールします。プロンプトが表示されたら、ドメイン名のデフォルトの選択を受け入れ、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 認証が構成されます。Postfix 構成では、SASL(Simple Access and Security Layer)モジュールによって認証が処理されます。

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

    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 上で Mailjet と Node.js を使用する方法について説明します。

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. この 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-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 Platform のその他の機能を試す。チュートリアルをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント