SendGrid でのメールの送信


このチュートリアルでは、SendGrid を使用して、Compute Engine 仮想マシン(VM)インスタンスで実行されているアプリからメールを送信する方法を説明します。

目標

  • Compute Engine インスタンス上で Postfix で SendGrid を使用する
  • Compute Engine インスタンス上で実行される Java コードで SendGrid を使用する
  • Compute Engine インスタンス上で実行される Node.js コードで SendGrid を使用する
  • Compute Engine インスタンス上の Microsoft Exchange エッジ トランスポート サーバーで SendGrid を使用する

SendGrid の設定の詳細については、SendGrid デベロッパー向けドキュメントをご覧ください。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

  • Compute Engine

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

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

Postfix でインスタンスからメールを送信する

sendgrid-tutorial インスタンスに接続し、Postfix で SendGrid を実行するには、次の手順を行います。

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

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

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

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

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

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

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

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

    Debian

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

    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 パスワード マップを生成します。your-api-key は、生成した API キーに置き換えます。

    echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
  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*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. 構成を再読み込みして、変更したパラメータを読み込みます。

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

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

    Debian

    apt -y install mailutils

    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. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

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

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

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

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

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

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

    apt -y update && apt -y install git-core openjdk-11-jdk maven
    
  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-11-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. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

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

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

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

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

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

    Debian

    apt update
    

    CentOS

    yum update -y
    

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

    Debian

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

    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_14.x | sudo bash -
    sudo apt -y install nodejs
    

    CentOS

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

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

    yum -y install nodejs
    

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

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

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

    cd nodejs-docs-samples/compute
    
  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
    

Exchange エッジ トランスポート サーバーからメールを送信する

外部への送信コネクタを構成することで、SendGrid からメールが送信されるように Microsoft Exchange を設定できます。詳細については、Compute Engine への Microsoft Exchange Server 2016 のデプロイをご覧ください。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

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

プロジェクトを削除するには:

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

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

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

Compute Engine インスタンスを削除するには:

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. sendgrid-tutorial インスタンスのチェックボックスを選択します。
  3. インスタンスを削除するには、 [その他の操作] をクリックし、[削除] をクリックしてから、指示に沿って操作します。

次のステップ

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