SendGrid でのメールの送信

このチュートリアルでは、SendGrid を使用して Compute Engine インスタンス上で実行されるアプリケーションからメールを送信する方法を示します。SendGrid は、毎月 12,000 件の取引メールを Compute Engine ユーザーにトライアルとして無料で提供するサードパーティのメールサービスです。

目標

  • Compute Engine インスタンス上で Postfix で SendGrid を使用する
  • Compute Engine インスタンス上で実行される Java コードで SendGrid を使用する
  • Compute Engine インスタンス上で実行される Node.js コードで SendGrid を使用する

費用

このチュートリアルでは、Cloud Platform の課金対象となるコンポーネント(Google Compute Engine を含む)を使用しています。

Cloud Platform を初めて使用される方は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  5. [インスタンスを作成] をクリックします。
  6. [名前] をsendgrid-tutorialに設定します。
  7. [ブートディスク] の [変更] をクリックし、ブートディスクの構成を開始します。
  8. [OS イメージ] タブで、Debian または CentOS イメージを選択します。

  9. [選択] をクリックします。
  10. [作成] をクリックしてインスタンスを作成します。
  11. GCP Marketplace を使用して、SendGrid メールサービスに登録します。ユーザー名、パスワード、ホスト名を含む、SendGrid SMTP アカウントの認証情報を書き留めておきます。SMTP ユーザー名とパスワードは、サービスへの登録に使用したものと同じです。SendGrid のホスト名は smtp.sendgrid.net です。
  12. API キーを作成します。
    1. SendGrid にログインし、[Settings] > [API Keys] の順に移動します。
    2. API キーを作成します。
    3. キーの権限を選択します。メールを送信するには、キーに少なくとも Mail send(メール送信)の権限が必要です。
    4. [Save] をクリックして、キーを作成します。
    5. SendGrid によって、新しいキーが生成されます。これは、唯一のキーのコピーであるため、キーをコピーして後で使用できるよう保存してください。

インスタンス上で Postfix を使用してメールを送信する

以下の手順に従って sendgrid-tutorial インスタンスに接続し、Postfix を使用して SendGrid を実行します。

SSH を使用して sendgrid-tutorial インスタンスに接続する

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行の [SSH] をクリックします。

Postfix で SMTP リレーとして SendGrid を構成する

Postfix で SMTP リレーとして SendGrid を使用するには、SSH ターミナルで次のコマンドを実行します。

  1. スーパーユーザーになります。

    sudo su -
    
  2. 安全なマスク解除を設定します。

    umask 077
    
  3. Postfix Mail Transport Agent をインストールします。

    Debian

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

    CentOS

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

    プロンプトが表示されたら、[Local Only] の構成を選択し、デフォルトのドメイン名を受け入れます。

  4. Postfix の構成オプションを変更します。編集できるように /etc/postfix/main.cf を開きます。たとえば、nano テキスト エディタを使用する場合は、次のコマンドを入力します。

    nano /etc/postfix/main.cf
    
  5. ファイルを更新します。

    1. 次の行をコメントアウトします。

      # default_transport = error
      # relay_transport = error
      
    2. 次の行をファイルの末尾に追加します。

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

  6. ファイルを保存して閉じます。

  7. 始める前にで生成した API キーを使用して、SASL パスワード マップを生成します。

    echo [smtp.sendgrid.net]:2525 apikey:[YOUR_API_KEY] >> /etc/postfix/sasl_passwd
    

    [YOUR_API_KEY] は、生成した API キーです。

  8. postmap ユーティリティを使用して .db ファイルを生成します。

    postmap /etc/postfix/sasl_passwd
    
  9. .db ファイルがあることを確認します。

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. 認証情報を含むファイルは不要となったため、このファイルを削除します。

    rm /etc/postfix/sasl_passwd
    
  11. .db ファイルに対する権限を設定し、他のファイルが削除されていることを確認します。

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. 構成を再読み込みして、変更したパラメータを読み込みます。

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. mailutils または mailx パッケージをインストールします。

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  14. テストメールを送信します。

    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 インスタンスに接続する

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行の [SSH] をクリックします。

メール メッセージを作成して送信する

以下の手順では、SendGrid Java クライアント ライブラリを使用して、メール メッセージを作成し、SendGrid を介して送信します。完全な例は GitHub で確認できます。

SSH ターミナルで、以下を実行します。

  1. スーパーユーザーになり、安全な umask を設定します。

    sudo su -
    umask 077
    
  2. Java と Maven をインストールします。

    apt-get update -y && apt-get install git-core openjdk-8-jdk maven -y
    
  3. GitHub リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. この例のメイン ソースコードに移動します。

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. 編集できるように SendEmailServelet.java を開きます。

    • YOUR-SENDGRID-API-KEY を SendGrid アカウントの API キーに置き換えます。

    • YOUR-SENDGRID-FROM-EMAIL をメールの送信元として使用するメールアドレスに置き換えます。

    • DESTINATION-EMAIL をメールの送信先として使用するメールアドレスに置き換えます。

  6. サンプルコードのルート ディレクトリに移動します。

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Java クラスをパッケージ化します。

    mvn clean package
    
  8. 新しい target ディレクトリに移動します。

    cd target
    
  9. jar ファイルを実行できるように権限を設定します。

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. 代替の Java バージョン セレクタを実行します。

    update-alternatives --config java
    

    java-8-openjdk-amd64 オプションを選択します。

  11. Java ファイルを実行します。

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

インスタンス上で Node.js を使用してメールを送信する

このサンプルを実行するには、VM インスタンスに Node.js バージョン 7.6 以降がインストールされている必要があります。

SSH を使用して sendgrid-tutorial インスタンスに接続する

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行の [SSH] をクリックします。

メール メッセージを作成して送信する

SSH ターミナルで、以下を実行します。

  1. スーパーユーザーになり、安全な umask を設定します。

    sudo su -
    umask 077
    
  2. パッケージ リポジトリを更新します。

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. Node.js の依存関係をインストールします。

    Debian

    apt-get install git-core curl build-essential openssl libssl-dev -y
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. Node.js をインストールします。このインストールにより、デフォルトで npm もインストールされます。

    Debian

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    

    次に、Node.js をインストールします。

    yum -y install nodejs
    

  5. SendGrid Node.js クライアントをインストールします。

    npm install sendgrid
    
  6. サンプル リポジトリのクローンを作成します。

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. SendGrid サンプルが含まれているディレクトリに移動します。

    cd nodejs-compute/samples
    
  8. sendgrid.js ファイルをコピーします。

    cp sendgrid.js sendmail.js
    
  9. 編集できるように sendmail.js を開きます。

    • <your-sendgrid-api-key> を SendGrid アカウントの API キーに置き換えます。

    • from_email@example.com をメールの送信元となるメールアドレスに置き換えます。

    • to_email@example.com をメールの送信先となるメールアドレスに置き換えます。

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text:
          'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. プログラムを実行して、SendGrid を介してメール メッセージを送信します。

    node sendmail.js
    

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントへの課金が発生しないようにする手順は次のとおりです。

プロジェクトを削除する

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除する手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

Compute Engine インスタンスを削除する

Compute Engine インスタンスを削除する手順は次のとおりです。

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 次のチェックボックスをオンにします。 sendgrid-tutorialインスタンス。
  3. インスタンスを削除するには、[削除] () をクリックします。

次のステップ

Google Cloud Platform のその他の機能を試す。チュートリアルをご覧ください。

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

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

Compute Engine ドキュメント