このチュートリアルでは、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
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- In the Google Cloud console, go to the Create an instance page.
-
Set Name to
sendgrid-tutorial
. - In the Boot disk section, click Change to begin configuring your boot disk.
- [Public images] タブで [a Debian or CentOS image version] を選択します。
- [選択] をクリックします。
- VM を作成するには、[作成] をクリックします。
-
Google Cloud Marketplace を使用して、SendGrid メールサービスに登録します。ユーザー名、パスワード、ホスト名を含む、SendGrid SMTP アカウントの認証情報を書き留めておきます。SMTP ユーザー名とパスワードは、サービスへの登録に使用したものと同じです。SendGrid のホスト名は
smtp.sendgrid.net
です。 - API キーを作成する:
- SendGrid にログインし、[Settings] > [API Keys] の順に移動します。
- API キーを作成します。
- キーの権限を選択します。メールを送信するには、キーに少なくとも Mail send(メール送信)の権限が必要です。
- [Save] をクリックして、キーを作成します。
- SendGrid によって、新しいキーが生成されます。これは唯一のキーのコピーであるため、後で使用できるようにキーをコピーして保存してください。
Postfix でインスタンスからメールを送信する
sendgrid-tutorial インスタンスに接続し、Postfix で SendGrid を実行するには、次の手順を行います。
SSH を使用して sendgrid-tutorial インスタンスに接続する
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
Postfix で SMTP リレーとして SendGrid を構成する
Postfix で SMTP リレーとして SendGrid を使用するには、SSH ターミナルで次のコマンドを実行します。
スーパーユーザーになります。
sudo su -
安全なマスク解除を設定します。
umask 077
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] の構成を選択し、デフォルトのドメイン名を受け入れます。
Postfix の構成オプションを変更します。
/etc/postfix/main.cf
を編集用に開きます。たとえば、nano
テキスト エディタを使用する場合は、次のコマンドを入力します。nano /etc/postfix/main.cf
ファイルを更新します。
次の行をコメントアウトします。
# default_transport = error # relay_transport = error
次の行をファイルの末尾に追加します。
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)モジュールによって認証が処理されます。
ファイルを保存して閉じます。
始める前にで生成した API キーを使用して、SASL パスワード マップを生成します。
your-api-key
は、生成した API キーに置き換えます。echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
postmap
ユーティリティを使用して.db
ファイルを生成します。postmap /etc/postfix/sasl_passwd
.db
バケットがあることを確認するls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root ... /etc/postfix/sasl_passwd -rw------- 1 root root ... /etc/postfix/sasl_passwd.db
認証情報を含むファイルは不要となったため、このファイルを削除します。
rm /etc/postfix/sasl_passwd
.db
ファイルに対する権限を設定し、他のファイルが削除されていることを確認します。chmod 600 /etc/postfix/sasl_passwd.db ls -la /etc/postfix/sasl_passwd*
-rw------- 1 root root ... /etc/postfix/sasl_passwd.db
構成を再読み込みして、変更したパラメータを読み込みます。
Debian
/etc/init.d/postfix restart
CentOS
postfix reload
mailutils
パッケージまたはmailx
パッケージをインストールします。Debian
apt -y install mailutils
CentOS
yum install mailx -y
テストメールを送信します。
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 インスタンスに接続する
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
メール メッセージを作成して送信する
以下の手順では、SendGrid Java クライアント ライブラリを使用して、メール メッセージを作成し、SendGrid を介して送信します。完全な例は GitHub で確認できます。
SSH ターミナルで、以下を実行します。
スーパーユーザーになり、安全な umask を設定します。
sudo su - umask 077
Java と Maven をインストールします。
apt -y update && apt -y install git-core openjdk-11-jdk maven
GitHub リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
この例のメイン ソースコードに移動します。
cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
SendEmailServelet.java
を編集用に開きます。your-sendgrid-api-key
を、SendGrid アカウントの API キーに置き換えます。your-sendgrid-from-email
を、メールの送信元として使用するメールアドレスに置き換えます。destination-email
を、メールの送信先として使用するメールアドレスに置き換えます。
サンプルコードのルート ディレクトリに移動します。
cd /root/java-docs-samples/compute/sendgrid
Java クラスをパッケージ化します。
mvn clean package
新しい
target
ディレクトリに移動します。cd target
jar ファイルを実行するための権限を設定します。
chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
代替の Java バージョン セレクタを実行します。
update-alternatives --config java
[
java-11-openjdk-amd64
] の設定を選択します。Java ファイルを実行します。
java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
インスタンス上で Node.js を使用してメールを送信する
このサンプルを実行するには、VM インスタンスに Node.js
バージョン 7.6 以降がインストールされている必要があります。
SSH を使用して sendgrid-tutorial インスタンスに接続する
- In the Google Cloud console, go to the VM instances page.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
メール メッセージを作成して送信する
SSH ターミナルで、以下を実行します。
スーパーユーザーになり、安全な umask を設定します。
sudo su - umask 077
パッケージ リポジトリを更新します。
Debian
apt update
CentOS
yum update -y
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
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
SendGrid Node.js クライアントをインストールします。
npm install sendgrid
サンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
SendGrid サンプルが含まれているディレクトリに移動します。
cd nodejs-docs-samples/compute
sendgrid.js
ファイルをコピーします。cp sendgrid.js sendmail.js
sendmail.js
を編集用に開きます。your-sendgrid-api-key
を、SendGrid アカウントの API キーに置き換えます。from-email@example.com
を、メールの送信元として使用するメールアドレスに置き換えます。to-email@example.com
を、メールの送信先として使用するメールアドレスに置き換えます。
プログラムを実行して、SendGrid を介してメール メッセージを送信します。
node sendmail.js
Exchange エッジ トランスポート サーバーからメールを送信する
外部への送信コネクタを構成することで、SendGrid からメールが送信されるように Microsoft Exchange を設定できます。詳細については、Compute Engine への Microsoft Exchange Server 2016 のデプロイをご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Compute Engine インスタンスを削除する
Compute Engine インスタンスを削除するには:
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
sendgrid-tutorial
instance. - To delete the instance, click More actions, click Delete, and then follow the instructions.
次のステップ
Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。