ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

プログラムでメール送信失敗を判定して、別のメールアドレスに送りなおすことができるか

考えてみたけれど、簡単には出来ないという結果になった。

f:id:AJYA:20120724215042j:plain

photo credit: Éole via photo pin cc

 

なぜそんなことを考えたのか

お客さんから、

「プログラムから添付ファイル付きメールを送ると、添付ファイルの容量が大きいために受け取れない人がいる。

そのとき、別のメールアドレスが登録されていたら、そちらに自動で送りなおすことはできないか」

と質問された。

 

考えた内容

PHPで作られたプログラムだったので、mail()かmb_send_mail()を使っているんだろうということで、mail()のマニュアルを読んだ。

PHP: mail - Manual
マニュアルの返り値には、

メール送信が受け入れられた場合に TRUE 、それ以外の場合に FALSE を返します。
メールの配送が受け入れられたかどうかが基準であることに注意しましょう。 メールが実際にあて先に届いたかどうかでは「ありません」。

と書いてあり、判定できないということがわかった。

 

メールは直接送信しているわけではないので、例え関数の結果が正常でも、実際はエラーの場合もあるということだ。

 

今回学んだこと

用意されている関数だけでは実現するのは難しい。

ソケット通信をして、SMTPプロトコルを実装すれば出来るような気がするが、相手側がメールを経由していたら、経由元からエラーは返ってこないだろうから、確実ではなさそう。

 

手間がかかるが、リターンメールの内容を読んで、人力で対応するのが、一番確実そう。