rcmdnk's blog

Postfix実用ガイド

新しいMacでコマンドラインメールも使えてる風感じを受けていたら やはり使えなくて設定しましたが、 以前と大分違う感じになっていてちょっと戸惑いました。

新規High Sierraと以前のアップグレード版は違う?

以前使っていたMacもHigh Sierraでしたがその前のバージョン (最初はMavericks) からのアップグレードで使っていました。

なので設定ファイルや中のソフトとかが一部新規High Sierraとは違う可能性があります。

ちょっとその辺も含めて今回やった設定などについてメモしておきます。

LaunchDaemons

postfixを使ったメールサーバーを作りますが、 以前はLaunchDaemonsを使った自動機能が行われていましたが、 今回確認して見たところ

/System/Library/LaunchDaemons/org.postfix.master.plist がありませんでした。 実際、

$ sudo postfix status
postfix/postfix-script: the Postfix mail system is not running

と走っていません。

なので手動(sudo postfix start)で立ち上げたりしてテストをしていましたが、 実は止まっている状態で

$ echo test mail from Mac! | mail -s test [email protected]

みたいにメールを送ってみると設定がちゃんとされていれば送れます。

直後にもう一回postfixを調べてみると

$ sudo postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 29420

とpostfixが走っています。

ただ、しばらく(1分位?)すると再びnot runningになります。

どうもmailコマンドでメールを送る際、postfixのサービスが必要であれば自動で立ち上げ さらにしばらくすると止めるという仕様になってるらしいです。

下みたいなLaunch Daemon Property Listを自分で用意して入れてる人も居るみたいですが その必要はないみたい。

macOS 10.12 “Sierra” Postfix Launch Daemon Property List

また、postfixの設定を変更した際もすぐに反映したければ

$ sudo postfix reload

しても良いですが、直前にmailコマンドを使ってない限り、それを行う必要もなく、 次にmailをする際に自動的にpostfixが新しい設定を読み込んで立ち上がってくれます。

このあたり、前のMacではHigh Sierraになってからチェックしてませんでしたが 実はこれと同じ状態だったのかもしれません。 (もしくはLaunchDaemonsが残ってて常にpostfixが走っていたけど実はそれは余計でわざわざLaunchDaemonsを使わなくても良かった状態だったか。)

ログがない

以前までは/var/log/maillogpostfixのログが出ていました。

ですが、今の環境でpostfixを走らせてもログが出ません。

$ sudo postfix start

として動かしても出ません。

このログを見るためには

$ log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info

とします1

これでこのターミナルにログが出てくるので他のターミナルでメールとかを送るテストを行って確認を行います。

もし常時監視したいのであればこのコマンドをどこかのファイルに書き出す様にして自動で立ち上げておいたりする必要があります。 どこかの設定でできそうなものですが。

この出力がコンソール.appとかに出てくるものと関係あると思ってたんですが どうもそれとは違うようでコンソール.appからsmtpのログは確認出来ませんでした。 (この辺システムがよくわかってない。)

GmailのSMTPサーバーを使う

ということで自動起動やログの部分を理解した上で GmailのSMTPサーバーを使ってMacからメールを送る設定をします。

設定自体は上でやったようなことと一緒で、 まずパスワードのファイルを作ります。

2段階認証にしてる場合には アプリパスワード から専用のパスワードを取得します。

$ cd /etc/postfix

へ移動して

$ sudo vim gmail_passwd

などで編集して

/etc/postfix/gmail_passwd
1
smtp.gmail.com:587 <user>@gmail.com:<passwd>

といった内容のファイルを用意します。

出来たら

$ sudo postmap gmail_passwd

で、gmail_passwd.dbを作ります。平文でパスワードを書いたgmail_passwdは削除しておきます。

$ sudo rm gmail_passwd

出来たら 以下を/etc/postfix/main.cfに加えます。

/etc/postfix/main.cf
1
2
3
4
5
6
7
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_sasl_mechanism_filter = plain

これで上のログを表示させながら別ターミナルから

$ echo test mail from Mac! | mail -s test <your address>

といった感じに適当にメールを送ってみます。 上手くメールが届いてたらOK。

この設定だと、From欄はGmailでデフォルトに指定しているアドレスになっているはずです。

以前の設定との違い

大体以前の設定と同じですが、今回 relayhostの部分が括弧つき:

relayhost = [smtp.gmail.com]:587

の状態だと

2018-05-03 XX:XX:XX.XXXXXX+0900 0x969feed  Info        0x0                  70961  smtp: 942124EFDB4: to=<[email protected]>, relay=smtp.gmail.com[108.177.97.108]:587, delay=1, delays=0.04/0.06/0.78/0.16, dsn=5.5.1, status=bounced (host smtp.gmail.com[108.177.97.108] said: 530-5.5.1 Authentication Required. Learn more at 530 5.5.1  https://support.google.com/mail/?p=WantAuthError b5sm20286954pfc.16 - gsmtp (in reply to MAIL FROM command))

といったエラーが出ました。 特にあってもなくても良いはずで、いろいろな例でも付けた状態のものが多いですが 何故かエラーに。 これを外すと問題なく送れるようになりました。

上手く行かない場合のチェック

上手く行かない場合には

$ log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info

でログを表示させつつ、mailを送るチェックの他に

$ sudo postfix start

もしくは

$ sudo postfix reload

など、手動でpostfixをスタートさせたりリロードさせたりすると main.cfのエラーとかを表示してくれることがあります。 (main.cfの間違いならコマンドを打った側に出ます。)

Sponsored Links
Sponsored Links

« GitHub PagesでカスタムドメインでもHTTPS化がサポートされた macOS High Sierra 10.13.4にしたらDockのフォルダがちょっとおかしくなった »

}