2007.08.06

PHPでメール送信する場合にメールサーバで拒否されないために

携帯電話宛にPHPのプログラムからメール送信を行う場合に、
Envelope From (※1)が存在するドメイン名のメールアドレスになっていないと
携帯キャリアのメールサーバで転送拒否されてしまうことがあります。

私が試した限り、Docomoでは転送されsoftbankとAUでは転送が拒否されてしまいました。
また、携帯だけでなくISPや企業でも拒否されることがあります。

PHPでメールを送る時に使用するmail関数では、mail関数の第五引数で
sendmailの-fオプションを使用しenvelope senderの値を指定することで
対応できます。

サンプル
mail("hoge@hoge.com", "subject", "test message", "From: hogefrom@hoge.com", "-fhogefrom@hoge.com");

その他の方法として、PearのMailを使用することも対応策として有効です。
PearのMailではfromのアドレスを自動でenvelope-fromに設定してくれるので
mail関数を使用する時のように、-fオプションを使用する煩わしさがありません。


※1
envelope fromとは、宛先が不明だった場合にメールサーバがエラーメールを
返す宛先になります。何も設定せずに送信すると、apache@localhost.localdomainや
apache@サーバのホスト名になってしまい、外部のメールサーバからはアクセス不可な
ドメイン名になります。

コメント (1)

私も同じ現象が起こりました。
mb_send_mail()の関数を使って3キャリアにメール送信しようと思っていたのですが、Docomoは送信できたのですが、AU,Softbankに送信できません。

上記に書かれているようにmail関数にして第5引数を-fにしたのですが送信できません。
もし何かお分かりになるましたら、ご連絡頂けると幸いです。
宜しくお願いします。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nishimaki