FreeBSD上でPHPからメールを送ると本文が表示されない
仮想マシンの開発環境でPHPからメール送信したときに本文が空だったので調査したときの覚書。
環境: FreeBSD 14.1-RELEASE-p2, PHP 8.3.6
別コンソールでmaillogを監視しながら状況を整理する。
# tail -f /var/log/maillog
コンソールで直接メール送信のPHPを実行する。
# php -r 'mail("suganuma@hoge.co.jp", "test", "hello");'
本文がないメールが届く。
PHPを経由せずにメールを送信する。
# mail suganuma@hoge.co.jp
本文がある。
なので、PHPとメールエージェントの間で問題がありそう。
その他の分かったこと。
- 本番環境は問題なし。
- CentOS Stream 9の開発環境も問題なし。
メール転送エージェントDragonFly Mail Agent(DMA)
maillogを見ると、dmaというメール転送エージェントで送信している。
FreeBSD 14.0からデフォルトのメール転送エージェント(MTA)はDMAを使うらしい。
参考: Chapter 31. Electronic Mail | FreeBSD Documentation Portal
設定ファイルを確認。
# less /etc/mail/mailer.conf
sendmail /usr/libexec/dmamailq /usr/libexec/dmanewaliases /usr/libexec/dma
postfixに切り替えてみる。
Postfixをインストール
pkgからインストール。
# pkg search postfix
# pkg install postfix
画面の指示通りに実行する。
# sysrc postfix_enable="YES"
# sysrc sendmail_enable="NONE"
# install -d /usr/local/etc/mail
# install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf
# vim /etc/periodic.conf
daily_clean_hoststat_enable="NO"daily_status_mail_rejects_enable="NO"daily_status_include_submit_mailq="NO"daily_submit_queuerun="NO"
再起動してPostfixが起動しているか確認。
# reboot
# service postfix status
別コンソールでmaillogを監視する。
# tail -f /var/log/maillog
メール送信のPHPを実行する。
# php -r 'mail("suganuma@hoge.co.jp", "test", "hello");'
無事本文が表示された。