このチュートリアルでは、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 アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
- Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
- [名前] を
sendgrid-tutorial
に設定します。 - [ブートディスク] の [変更] をクリックし、ブートディスクの構成を開始します。
- [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 インスタンスに接続する
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
- 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] をクリックします。
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 インスタンスに接続する
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
- 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] をクリックします。
メール メッセージを作成して送信する
以下の手順では、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 インスタンスに接続する
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
- 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] をクリックします。
メール メッセージを作成して送信する
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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
Compute Engine インスタンスを削除する
Compute Engine インスタンスを削除するには:
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
-
sendgrid-tutorial
インスタンスのチェックボックスを選択します。 - インスタンスを削除するには、 [その他の操作] をクリックし、[削除] をクリックしてから、指示に沿って操作します。
次のステップ
Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center をご覧ください。