PHPからメールを送信する
PHPのメール送信をしたらメールヘッダにローカルマシンの情報が大量に出てきたので、それを消した時のメモ。
<?php $headers = "MIME-Version: 1.0\r\n" . "Content-Transfer-Encoding: 7bit\r\n" . "Content-Type: text/plain; charset=ISO-2022-JP\r\n" . "From: Hamaco <hamaco@example1.jp>\r\n"; $subject = mb_encode_mimeheader("メール送信テスト", "ISO-2022-JP"); $body = mb_convert_encoding("これはテストメールです。", "ISO-2022-JP"); $to = "hamaco@example0.jp"; mail($to, $subject, $body, $headers);
Receivedを削除する
Receivedにローカルマシンのホスト名が出ていたけども、特にDNSで名前解決出来るようなホスト名じゃないので削除する。
main.cfから、header_checksのコメントアウトをはずす。
% sudo vim /etc/postfix/main.cf - #header_checks = regexp:/etc/postfix/header_checks + header_checks = regexp:/etc/postfix/header_checks
header_checksファイルを変更する。
% sudo vim /etc/postfix/header_checks + /^Received:/ IGNORE
これで、Receivedにローカルマシンの情報は出なくなるはず。
Return-Pathの変更
Return-Pathはメールソフト側ではなく、メールサーバ側が付けるヘッダらしい。Postfixの場合は、EnvelopeFromをPHP側で設定してやれば変更出来るらしいので、下記の様にmail関数の第5引数に追加してやれば良いみたい。
mail($to, $subject, $body, $headers, "-f hamaco@example1.jp");
ただ、これだけだとX-Authentication-Warningヘッダが付いてしまうので、header_checksファイルに無視する設定を追加する。
% sudo vim /etc/postfix/header_checks +/^X-Authentication-Warning:/ IGNORE
これで、Return-Pathの変更が出来るはず。
Message-Idの設定
これでもまだ、Message-Idヘッダにローカルマシンのホスト名が出てくるので、Message-IdをPHPで設定してやる。
$headers .= "Message-Id: <" md5(uniqid(microtime())) . "@example1.jp>\r\n"/;
php.netのmail関数のページに書き込まれていたのをそのまま使用している。
最後に
ローカルマシンの情報が出ないようにするのが目的だったので、Receivedとか削除しちゃったけども、届いたメールを見てみたら完全にReceivedがないので、怪しいメールになってしまった感じがしなくもない。
とりあえず、最終的に出来上がったPHPのコードはこんな感じ。
<?php $headers = "MIME-Version: 1.0\r\n" . "Content-Transfer-Encoding: 7bit\r\n" . "Content-Type: text/plain; charset=ISO-2022-JP\r\n" . "Message-Id: <" . md5(uniqid(microtime())) . "@example1.jp>\r\n" . "From: Hamaco <hamaco@example1.jp>\r\n"; $subject = mb_encode_mimeheader("メール送信テスト", "ISO-2022-JP"); $body = mb_convert_encoding("これはテストメールです。", "ISO-2022-JP"); $to = "hamaco@example0.jp"; mail($to, $subject, $body, $headers, "-f hamaco@example1.jp");