hamacoの日記

どうでもいい日常をたれながす日記だと思う

PHPからメールを送信する

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");