VirtualBox にて Postfix + Gmail を使って簡単にメール送信テストをする

ローカル環境で開発してる時に
VirtualBox から Gmail を使ってお手軽にメール送信を行う設定。

用意するもの

  • Gmail アカウント
  • Postfix と openssl などはインストール済みを前提

postfix が起動しているか確認

$ systemctl status postfix.service -l

MTA (Mail Transfer Agent) が postfix でなければ postfix に設定する

# 確認
$ alternatives --display mta

# 設定
$ alternatives --config mta

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

openssl で smtp.gmail.com に繋がるか確認する

username & password のそれぞれの base64 エンコード結果をコピーする

# username
$ echo "sample@gmail.com" | openssl enc -e -base64
# password
$ echo "your_password" | openssl enc -e -base64

接続

$ openssl s_client -starttls smtp -connect smtp.gmail.com:587
・
・<中略>
・

# 下記表示されればおk
250 SMTPUTF8

# 下記入力
EHLO localhost

# 下記表示される
250-smtp.gmail.com at your service, [220.100.22.61]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

# 下記入力
AUTH LOGIN

# 下記表示される
334 abcdefg
base64 でエンコードした username を貼り付けてエンター

# 下記表示される
334 abcdefg
base64 でエンコードした password を貼り付けてエンター

# 下記表示されればおk
235 2.7.0 Accepted

ctl + c で抜ける

Postfix の設定

コピーをとっておく

$ cd /etc/postfix/
$ cp main.cf main.cf.origin
$ vi main.cf

main.cf

# main.cf の最終行に下記追加
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

sasl の設定

$ cd /etc/postfix/

# /etc/postfix/
$ vi gmail_sasl_passwd

# メールとパスワードを記述
[smtp.gmail.com]:587 xxxx@gmail.com:パスワード

# /etc/postfix/gmail_sasl_passwd.db が生成される
$ postmap /etc/postfix/gmail_sasl_passwd

# 権限の変更
$ chown root:root /etc/postfix/gmail_sasl_passwd
$ chmod 600 /etc/postfix/gmail_sasl_passwd
$ chown root:root /etc/postfix/gmail_sasl_passwd.db
$ chmod 600 /etc/postfix/gmail_sasl_passwd.db

# 再起動
$ systemctl restart postfix.service

メールを送ってみる

$ echo test | mail 宛先@xxxx.com

送信できているか確認

# メールを送信できず、溜まっている場合はそのリストとエラー内容が表示される
$ postqueue -p

# 溜まっているメールを削除する
$ postsuper -d ALL deferred