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/dma
mailq           /usr/libexec/dma
newaliases      /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");'

無事本文が表示された。


【関連記事】