vagrant上のLaravelでメール送信したところ、
530 5.7.1 Authentication required
というエラーが返ってきた。。。
そこからメールを送れるようにするまでのログ。
まず、postfixはインストールされているか?
whereis sendmail
次の様に表示されれば、パスが通りインストールされている。
sendmail: /usr/sbin/sendmail
次に、postfixのconfファイルを修正
$ sudo vim /etc/postfix/main.cf
# localhost -> all
inet_interfaces = all
# all -> ipv4
inet_protocols = ipv4
# 以下は追加分
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
上のように、SMTPサーバはGmailを使う。 そのため、Gmailのアプリパスワードを入手する。 これにはGmailアカウントで2段階認証にしている必要がある。 生成するページは、 https://support.google.com/accounts/answer/185833?hl=ja から飛べる。
入手したら、sasl_passwdファイルを作成。
$ sudo vim /etc/postfix/sasl_passwd
内容は以下。
[smtp.gmail.com]:587 your_gmail_acc@gmail.com:your_app_password
そして、sasl_passwd.dbなるものを生成。
$ cd /etc/postfix/
$ sudo postmap sasl_passwd
postfix再起動。
sudo service postfix restart
これで準備はできたはず。 テスト送信。
$ sendmail your_gmail_acc@gmail.com
Subject: Test
Test Mail
.
送信成功!
次はLaravelの設定。
Vagrant のメール設定は、.envの設定変更でOK。
MAIL_PASSWORDは、sasl_passwdに設定してあるもので。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_gmail_acc@gmail.com
MAIL_PASSWORD=xxxxxxxxxx
MAIL_ENCRYPTION=tls
これで送信成功。