皆様こんにちは
エンジニアの川上です

IMG_1787

先日行われたPIALab. 一周年記念パーティーで
弊社田中の歌の上手さに衝撃を受けました
弊社須藤の「田中はプラットフォームだ」
という言葉の深淵に触れた気がします
気になる方はぜひ田中と仲良くなってカラオケ行ってみてください

ちなみに歌の上手さの一端が垣間見える動画が
弊社Facebookサイトに載っております
よろしければそちらもどうぞ

話は変わりまして
弊社オフィシャルサイトは
WordPressで運営しているのですが
ある日管理アカウントのパスワードを忘れて
パスワード変更を行おうとして気づきました
kawakamioko

「あれ?パスワード変更のメール送れないじゃん!!」

 

Google先生にお尋ねした所
GCEはデフォルト設定だとメールが送れないと判明したわけです
スパムメール等がデフォルト設定・デフォルトポートでは行えないようになっています
Googleさんの良心設計です

てなわけで
どれだけの人に需要があるか分かりませんが
行った手順を備忘録として記載することにしました
ちなみに
「SendGrid」
というサービスを使用する方法を取りました

以下概要です

・サーバ環境
Debian7
WordPress4.2.2

・手順
– SendGridにアカウント作成
– GCE InstanceにPostfixをインストール
– /etc/postfix/sasl_passwd を作成
– /etc/postfix/main.cf を修正
– libsasl2-modulesをインストール
– Postfix再起動、動作確認
– /etc/postfix/sasl_passwd を削除

・参考URL(GoogleCloudPlatform オフィシャル)
https://cloud.google.com/compute/docs/tutorials/sending-mail/
https://cloud.google.com/compute/docs/tutorials/sending-mail/using-sendgrid

■SendGridにアカウント作成

↑上記2番目のURLにアクセスし
「Sending Email using SendGrid」の「free tier」
のリンクからSendGridに遷移します

google-sendgrid-link2

SendGridの料金体系の「FREE」の「Get Started」を選択します
月あたり2万5千回のメール送信が可能です
それ以上のメール送信する場合は有料プランを使用します

sendgrid-select-free

「Get Started」を選択すると↓のような画面が表示されるので
ユーザ名
パスワード
メールアドレス
を入力し「Create Account New」をクリック
sendgrid-create-account

すると↓こんな画面が表示されて
sendgrid-success-created-account

入力したアドレスにメールが送信されるので
メールの「Confirm Your Email Address」をクリックして下さい
email-confirmation-created-account

すると↓こんな画面が表示されるので
自分の環境にあった内容で項目を入力して「Save」をクリック
sendgrid-frist-access-dashbord

最終的にこんな感じの画面が表示されていればOKです
sendgrid-dashbord

■GCE InstanceにPostfixをインストール

以下からGCE の InstanceにSSHでログイン後の作業になります

まず下記コマンドを実行します

# sudo -s
# umask 077
# apt-get update
# apt-get install postfix

Postfixのインストールが開始されると
GUI画面が表示されます
そこで「Local Only」を選択し
tabキーカーソル移動して「Ok」を選択
enterを押下します

console-postfix-install

そのまま「Ok」を選択
enterを押下します

console-postfix-gui-domain01

コマンド実行後のコンソールに
↓のようにOKが表示されば完了です
console-success-install-postfix

■/etc/postfix/sasl_passwd を作成

/etc/postfix/sasl_passwd を作成します
先に作成しておいたSendGridアカウントのユーザ名、パスワードを
それぞれYOUR_SENDGRID_USERNAME、YOUR_SENDGRID_PASSWORDに設定します

# cat > /etc/postfix/sasl_passwd << EOF
# [smtp.sendgrid.net]:2525 YOUR_SENDGRID_USERNAME:YOUR_SENDGRID_PASSWORD
# EOF

postmap コマンドを実行して xxx.dbファイル を生成します。
ls -l の結果に

/etc/postfix/sasl_passwd
/etc/postfix/sasl_passwd.db

が表示されていればOKです。

# postmap /etc/postfix/sasl_passwd
# ls -l /etc/postfix/sasl_passwd*

■/etc/postfix/main.cf を修正

ポイントは2つ

default_transport = error
relay_transport = error

をコメントアウトすることと、

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:2525

を追加することです。

最終的に↓こうなってればOKです
console-postfix-conf02

■libsasl2-modulesをインストール

下記コマンドでインストールします
インストールしないとエラーになる場合があります

# apt-get install libsasl2-modules

■Postfix再起動、動作確認

Postfixを再起動します

# postfix reload

下記コマンドを実行して /var/log/syslog ファイルにエラーが出力されていなければOKです
sendmailの EMAIL@EXAMPLE.COM には動作確認で送信したいメールアドレスを設定します

# printf 'Subject: test\r\n\r\npassed' | sendmail EMAIL@EXAMPLE.COM
# tail -n 5 /var/log/syslog

無事メールが届きました・・・やったね
send-mail-success

■/etc/postfix/sasl_passwd ファイル削除

最後に/etc/postfix/sasl_passwdファイルを削除します
理由は/etc/postfix/sasl_passwd.db が既に作成されており
sasl_passwdファイルにはユーザ名とパスワードが平文で記載されている為です

# rm -f /etc/postfix/sasl_passwd

以上でComputeEngine Instance から
メール送信することが出来るようになりました