目的
vagrantで仮想マシン(CentOS-7.2)を立ち上げ、メール受信時に特定のPHPを実行する開発環境を構築したい。
簡単なメール送信環境を作るため、メール送信用にもう一台仮想マシンを起動。
vagrant間のローカルネットワークなので適当なドメイン作り、メール送信サーバーのhostsに記述したのだが、
/var/log/maillogに Host or domain name not found
とエラーが出てうまく送信できない。
環境
# uname -r
3.10.0-327.13.1.el7.x86_64
# postconf | grep mail_version
mail_version = 2.10.1
milter_macro_v = $mail_name $mail_version
# alternatives --config mta
1 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
メール受信サーバー
- IP:192.168.33.50
- ホスト名:postfix
メール送信サーバー
- IP:192.168.33.51
/etc/hosts
192.168.33.50 postfix
原因
Postfixはデフォルトではdns
参照しかせず、サーバーの/etc/hosts
は参照しない。
解決方法
Postfixの設定ファイルに下記を記述。
/etc/postfix/main.cf
smtp_host_lookup = native
Postfixを再起動
systemctl restart postfix
メール送信の際は先に/etc/hosts
を参照し、書いていなければ通常通り/etc/resolv.conf
に指定されたネームサーバーへ問い合わせを行う。
メール受信時のPHPスクリプト実行
メール受信サーバー
Postfixの設定ファイルに下記を記述。
/etc/postfix/main.cf
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
PHP実行のためにエイリアスを設定。最終行に追記。
vagrant: vagrant,
としているのはvagrant宛のメールを残すため。
/etc/aliases
vagrant: vagrant, "| /usr/bin/php -f phpスクリプトファイルパス"
エイリアスを反映。
newaliases
メール送信サーバー
sendmail
コマンドでメール送信。
# echo Test message! |sendmail vagrant@postfix