読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

お使いのGmailのsmtpを使って、macのメールコマンドでメール送信を許可する設定の方法

postfix Mac OS X

スポンサードリンク

http://www.flickr.com/photos/91795203@N02/12290801226
photo by xmodulo


ちと時間かかった。。。


PHPを使って、メールフォームを作ったので、それの動作確認をするために、開発環境のMacGmailSMTPを使ってメールを送信できるようにしましたとさ。

その時に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にログインします。


ログイン後、右上のまるっこい画像をクリックして、[プライバシー]をクリック
f:id:aipacommander:20141031151116p:plain


次に画面の赤い枠[Google アカウントの設定にはこちらからアクセスできます。]をクリック
f:id:aipacommander:20141031151121p:plain


セキュリティのタブを選択して、赤い枠の[安全性の低いアプリのアクセス]をクリック
f:id:aipacommander:20141031151124p:plain


低いアプリのアクセスを有効にします。有効後は完了を押してください。
f:id:aipacommander:20141031151127p:plain

テスト


では、テストしましょう。Macのターミナルからmailコマンドを実行しましょう。

# echo "test" -> メールの内容になります。内容を変更したい場合は""の間の文字を変更してください。
# mail -s "test" -> mailコマンドのオプション -s はサブジェクト(件名)です。
$ echo "test" | mail -s "test" ${mail_address}

# ${mail_address} -> 送信したいメールアドレスに送信します。まずは自分を宛先に送信してみましょう。


成功するとこんな感じのメールが届くと思います。
f:id:aipacommander:20141031151130p:plain

送信されない場合


どこか設定が間違っているのが多いと思いますので、もう一度設定を見直してみましょう。環境が影響する可能性もありますので、メールキューを確認するコマンドを確認し、メールが送信されているのか、それともその前でエラーになっているのか問題を切り分けてみてください。

  • キュー確認コマンド
# メールキューを確認するコマンド
# キューにメールが溜まっていない場合は送信されているか、その前でエラーが発生していると思われる。設定を見直してみましょう。
$ postqueue -p
Mail queue is empty

# ちなみに、キューにメールがたまるとあんまし良くないので、たまったキューは削除してください。
$ postsuper -d ALL
  • postfixの文法確認コマンド
$ sudo postfix check

まとめ


テストし終えたらセキュリティ上安全にするためGmailの設定は戻し、Positfixは停止しておいてください。

$ sudo postfix stop


でわでわー。