SendGrid でのメールの送信

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

目標

  • 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 アカウントにログインします。

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

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

    [プロジェクトの選択] ページに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

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

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

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

  9. [選択] をクリックします。
  10. [作成] をクリックしてインスタンスを作成します。
  11. Google Cloud 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. Cloud 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 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.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 -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. Cloud Console で、[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. Cloud Console で、[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/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
    

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

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

クリーンアップ

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

プロジェクトの削除

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

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

  1. Cloud Console で [リソースの管理] ページに移動します。

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

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

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

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

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

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

  2. sendgrid-tutorial インスタンスのチェックボックスをクリックします。
  3. [削除] をクリックしてインスタンスを削除します。

次のステップ

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