Webサービスなどを構築する際にクラウドサービスを利用するのは、もはや当たり前とも言える時代です。そんな時、メール送信周りがうまくいかずにトラブルになるという話も良く聞かれます。送信はできるようになっても、迷惑メールとして判定されてしまったという話も聞かれます。
今回はそんなトラブルを回避すべく、Google Cloud PlatformとCustomers Mail Cloudを組み合わせる方法を紹介します。
Customers Mail Cloudの設定
まずはCustomers Mail Cloudにて送信サーバの設定を行います。
ユーザ登録
ユーザ登録はまず、メールアドレスとパスワードを入力するところからはじまります。
入力したメールアドレス宛にメールアドレスの確認メール(仮登録受付メール)が届きますので、URLをクリックします。その後、名前や住所といった必要な情報を入力します。ユーザ登録が完了すると、無料トライアル開始のための審査が入ります。時間は長くとも30分程度です。「Customers Mail Cloud 無料トライアル利用開始のご案内」というメールが届いたら利用できます。
ログイン後に行うこと
ログインしたら、2つの作業を行う必要があります。
DKIMキーを設定する
DKIMキーはメールのなりすましを防止するための技術になります。メール配信を行うドメインのTXTレコードに対して設定します。管理コンソールでドメインを追加しようとすると、専用のキーが表示されます。
ドメインは s999999999999._domainkey.example.com
のような形式になります。設定する値は v=DKIM1; p=MIG...QAB
のように指定されるはずです。この設定はシステム管理者などに依頼して行ってもらってください。
DNS設定はすぐに反映されませんので、数分後にDNSを確認ボタンを押します。正しく設定されていれば、ドメインが追加登録できます。
ユーザを追加する
次にメール配信を行うユーザを追加します。これはAPI設定にて行います。ユーザ名(メールアドレス形式)、パスワードを設定します。また、利用できる機能を制限できます。例えばSMTPのみ、APIのみといった指定も可能です。
サーバに設定を反映する
設定を行ったら、それをサーバに反映します。サーバ構成機能にて行います。この反映を行わないと、DKIMやユーザ追加設定が反映されませんので注意してください。ここまでで以下の情報が入手できているはずです。
- SMTPサーバのアドレス
- SMTPサーバのポート番号
- APIユーザ
- APIキー
これらの情報はメール送信時に設定しますので覚えておいてください。
Google Cloud Platformのセットアップ
続いてGoogle Cloud Platformでインスタンスを立ち上げます。今回はf1-micro、Ubuntu 18.04LTSを指定しています。インスタンスを立ち上げる際、自動的にSSHキーが入るようなのですが、うまく接続できなかったのであらかじめローカルにある公開鍵を指定しています。
インスタンスにログイン
インスタンスが立ち上がったら、SSHでログインします。あらかじめ指定した公開鍵のユーザが作成されています。
ssh (公開鍵のユーザ名)@(GCPインスタンスのIPアドレス)
セットアップ
まずはパッケージを更新します。
sudo apt-get update
今回は他社クラウド向けの設定ドキュメントを参考に、Postfixでメール転送設定を行います。
まずスーパーユーザになります。
sudo su -
マスク解除を設定します。
umask 077
Postfixをインストールします。
apt-get install postfix libsasl2-modules -y
途中で選択欄が表示されるので [Local Only]
を選択します。
入力欄も出ますが、デフォルトのままで問題ありません。
Postfixの設定
Postfixの設定は /etc/postfix/main.cf
に記述されています。このファイルを vi や nanoなどで開きます。
修正点は以下の通りです。まず、下記の設定をコメントアウトします。行頭に #
を書けばOKです。
# default_transport = error # relay_transport = error
relayhost という設定があるので、Customers Mail CloudのSMTPサーバアドレスとポート番号を記述します。以下は一例です。
# SMTPサーバのIPアドレス:ポート番号 という形です relayhost = sandbox.smtps.jp:10025
ファイルの末尾に以下を追記します。これは認証設定になります。
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
設定ファイルを保存して閉じます。
認証設定を行う
次に以下のコマンドを実行します。括弧内をすべて指定されたものに書き換えてください。
echo (SMTPサーバアドレス):(ポート番号) (APIユーザ):(APIキー) >> /etc/postfix/sasl_passwd
例えば下記のようになります。
echo sandbox.smtps.jp:10025 user:password >> /etc/postfix/sasl_passwd
DBファイルを生成します。
postmap /etc/postfix/sasl_passwd
DBファイル化したオリジナルファイルは不要なので削除します。
rm /etc/postfix/sasl_passwd
DBファイルに対してアクセス権限を設定します。
chmod 600 /etc/postfix/sasl_passwd.db
Postfixを再起動して設定を反映します。
/etc/init.d/postfix restart
メール送信を試す
では実際にメール送信を試してみます。mailコマンドをインストールします。
apt-get install mailutils -y
そして以下のようにコマンドを実行します。 (メールの送信元)
および (メールの送信先)
はそれぞれ書き換えてください。
echo 'メールの本文' | mail -s 'Mail Subject' -r '(メールの送信元)' (メールの送信先)
例えば以下のように実行します。
echo 'メールの本文' | mail -s 'Mail Subject' -r 'info@smtps.jp' user@smtps.jp
これでメールが届けば完了です。
まとめ
Postfixの設定が終わっていれば、プログラミングからはsendmailを通して配信するのと変わらずに利用できます。Google Cloud Platformは通常のメール送信ポート番号である25が利用できないようになっていますが、Customers Mail Cloudでは10025を使いますので問題ありません。
ぜひGoogle Cloud Platformでのメール送信にCustomers Mail Cloudをご利用ください。
Google Compute Engine のドキュメント | Compute Engine | Google Cloud