メールを送信するサービス等を開発していると、メール送信テストをする必要が出てきます。
開発環境でPostfixを使ってGmail経由でメール送信する方法を紹介します。
補足
Postfixのバージョン確認
$ postconf | grep mail_version mail_version = 3.2.2 milter_macro_v = $mail_name $mail_version
手順
1.main.cfでメールの設定を行う
$ sudo vi /etc/postfix/main.cf relayhost = [smtp.gmail.com]:587 mail_spool_directory = /var/spool/mail smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = plain smtp_tls_security_level = may
Postfix2.3以降は「smtp_use_tls = yes」ではなく「smtp_tls_security_level = may」を使います。
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#smtp_use_tls
smtp_use_tls (デフォルト: no)
この機能はPostfix 2.2以降で使えます。Postfix 2.3以降では smtp_tls_security_level を代わりに使ってください。
2.Googleでアプリパスワードを取得する
以下のサイトを参考にアプリパスワードを取得します。
デバイスは「mac」を選択します。
www.howtonote.jp
3.送信時の認証情報を設定する
# 認証情報の作成 $ sudo vi /etc/postfix/sasl_passwd [smtp.gmail.com]:587 hoge@gmail.com:取得したパスワード # 権限変更 $ sudo chmod 600 /etc/postfix/sasl_passwd # ハッシュ化 $ sudo postmap /etc/postfix/sasl_passwd
4.スプールを設定する
# ディレクトリ作成 $ sudo mkdir /var/spool/mail # 所有者・グループの変更 $ sudo chown ログインユーザー名:staff /var/spool/mail # 権限の変更 $ sudo chmod 700 /var/spool/mail
5.Postfixをリロードする
# すでに起動している場合 $ sudo postfix reload # 停止 $ sudo postfix start # 起動 $ sudo postfix stop
5.メール送信テストを行う
送信前に後で説明するメール送信ログの出力を行います。
$ mail hoge@gmail.com(送信先アドレス) Subject: test # タイトル test # 本文 . # メールを送信する
6.メールが届いているか確認する
メール送信ログ
Macではmaillogが生成されないようなので、メール送信前に以下のコマンドを実行しておきます。
$ log stream --predicate '(process == "smtpd") || (process == "smtp")' --info
次のようなメッセージが表示された場合、メール送信に失敗しています。
(host smtp.gmail.com[74.125.203.108] said: 530-5.7.0 Authentication Required. Learn more at 530 5.7.0 https://support.google.com/mail/?p=WantAuthError o8sm917374pjf.37 - gsmtp (in reply to MAIL FROM command))
送信が成功した場合、次のようなメッセージが表示されればOKです。
to=<hoge@gmail.com>, relay=smtp.gmail.com[2404:6800:4008:c01::6d]:587, delay=2.6, delays=0.02/0.04/1.5/1, dsn=2.0.0, status=sent (250 2.0.0 OK 1595305690 z25sm18507895pfg.140 - gsmtp)