ちと時間かかった。。。
PHPを使って、メールフォームを作ったので、それの動作確認をするために、開発環境のMacでGmailのSMTPを使ってメールを送信できるようにしましたとさ。
その時にPostfix(メールアプリケーション)の設定が必要になったのでメモ
ちなみに、この作業はすべてターミナルから行ってください。
作業の流れ
Postfix(メールアプリケーション)とGmailを連携させるために、必要な作業を行います。まずは認証用のファイルを作成しPostfix用に変換。んで、Postfixに必要な設定を加えて起動します。(または再起動)
その後、Gmail上でセキュリティレベルを落とします。うまくいけば、この後のテストで確認し送信できれば成功です。
環境
ちなみに自分の環境は下記
# MacOSのバージョンを表示するコマンド $ sw_vers ProductName: Mac OS X ProductVersion: 10.9.5 BuildVersion: 13F34 # Postfixのバージョンを表示するコマンド $ postconf | grep mail_version mail_version = 2.9.4
Gmailのアドレスとパスワードをとあるファイルに書き込む
下記のようにファイルを作成します。
# vimが使える人は下記コマンド # 追記 2014/12/01 「sudo」コマンドを付与しましょう。 sudo vim /etc/postfix/relay_passwd # × # 他のエディタさんは下記コマンド # × open /etc/postfix/relay_passwd # 上記コマンドは使えないので使わないでください(^^; # ※修正線が使えない・・・orz ### 内容 ### smtp.gmail.com:587 ${address}@gmail.com:${password} ########### # ${address} => アドレスはGmailのアドレスを入力します。 # ${password} => パスワードはGmailのログインパスワードを入力します。
入力し終えたら、保存してください。
追記 2014/12/1
コメントを頂きました。ありがとうございます!(^^
どうやら「open」コマンドはファイルが存在しない場合は新規作成を自動で行ってくれず、エラーになるようです。
また、そもそもvimが使えない人には不便な説明文だと思いますので、ちょっとコマンドチックに修正します。
echo "smtp.gmail.com:587 ${address}@gmail.com:${password}" | sudo tee -a /etc/postfix/relay_passwd
さらに、/etc/~のディレクトリは設定ファイルが多く存在するディレクトリであり、ほぼ管理者権限を持っていなければ書き込めないディレクトリですので、「sudo」をつけてあげましょう。
postmapコマンドでデータベース化し、作成したファイルを削除
$ sudo postmap /etc/postfix/relay_passwd $ sudo rm -rf /etc/postfix/relay_passwd
Postfixに設定します。
# vim派 $ sudo vim /etc/postfix/main.cf # その他 $ sudo open /etc/postfix/main.cf ### 内容 ### # HOST relayhost = smtp.gmail.com:587 # SASL smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd smtp_sasl_security_options = noanonymous # 2015/02/10 パラメータ追加 smtp_sasl_mechanism_filter = plain # TSL smtp_use_tls = yes smtp_tls_security_level = encrypt tls_random_source = dev:/dev/urandom ###########
追記 2015/2/10
最近、メールテストプログラムを組んだので、使っているMacでテストしようしたら、以前記載しただけの設定だけではできなくなっていました。
ので、下記パラメータを追加
smtp_sasl_mechanism_filter = plain
ここの記事を確認しただけなので、(事象も一緒)何故このようになったのかは不明ですが、助かりました。あざっす!(^^)
MacOSX - Macでコマンドラインやプログラムからmailを送る - Qiita
はじめ、smtp_sasl_mechanism_filter = plainを書いてなくて
SASL authentication failed; cannot authenticate to server smtp.gmail.com[173.194.72.108]: generic failure
というエラーが出たので追加した。
Postfixを起動(もしくは再起動)
# 起動の方法 $ sudo postfix start # 再起動 $ sudo postfix restart
Gmail側での設定
ここは画像で説明します。
Gmailにログインします。
ログイン後、右上のまるっこい画像をクリックして、[プライバシー]をクリック
次に画面の赤い枠[Google アカウントの設定にはこちらからアクセスできます。]をクリック
セキュリティのタブを選択して、赤い枠の[安全性の低いアプリのアクセス]をクリック
低いアプリのアクセスを有効にします。有効後は完了を押してください。
テスト
では、テストしましょう。Macのターミナルからmailコマンドを実行しましょう。
# echo "test" -> メールの内容になります。内容を変更したい場合は""の間の文字を変更してください。 # mail -s "test" -> mailコマンドのオプション -s はサブジェクト(件名)です。 $ echo "test" | mail -s "test" ${mail_address} # ${mail_address} -> 送信したいメールアドレスに送信します。まずは自分を宛先に送信してみましょう。
成功するとこんな感じのメールが届くと思います。
送信されない場合
どこか設定が間違っているのが多いと思いますので、もう一度設定を見直してみましょう。環境が影響する可能性もありますので、メールキューを確認するコマンドを確認し、メールが送信されているのか、それともその前でエラーになっているのか問題を切り分けてみてください。
- キュー確認コマンド
# メールキューを確認するコマンド # キューにメールが溜まっていない場合は送信されているか、その前でエラーが発生していると思われる。設定を見直してみましょう。 $ postqueue -p Mail queue is empty # ちなみに、キューにメールがたまるとあんまし良くないので、たまったキューは削除してください。 $ postsuper -d ALL
- postfixの文法確認コマンド
$ sudo postfix check