Vagrant centos上のLaravelからメール送信設定

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

これで送信成功。