PHPでメールフォームを作成する時によく使うのがmb_send_mail関数。メールフォームは項目が異なるだけでベースとなるプログラムは使いまわしたりするもの。そのため目立ったエラーは生じにくいのですが、「メールが送信できない」というトラブルが発生する事があります。
このトラブル、原因はとても簡単。ただ簡単なトラブルほどハマって抜け出せなくなってしまうもの。今回はmb_send_mail関数でメールが送信できない時に確認すべきことを掲載します。
サンプルコード
まずはPHPの記述例です。
<?php mb_language("ja"); mb_internal_encoding("utf-8"); $to="xxxxx@520328.jp"; $subject="お問い合わせ"; $msg="メッセージが入ります。"; $from = $_POST['fromMail']; $header="From: {$from}\nReply-To: {$from}\nContent-Type: text/plain;"; if(mb_send_mail($to,$subject,$msg,$header)){ echo "メールが送信されました。"; } else { echo "メールが送信できませんでした。"; } ?>
メールが送信されない原因
$_POST[‘fromMail’] には入力した人のメールアドレスが入る想定です。このように「Fromに入力されたメールアドレスを指定する」ことはよくある事ですが、この時、形式チェックを入れないで例えばメールアドレス欄に「あああ」いったメールアドレスの形式でない文字列を入れたとします。するとメールが送信されない場合があるのです。
制作中に送信テストとして全項目に「111」や「テスト」等の文字列を入れてとりあえず送信できるか確認する、という事はよくあるかと思いますが、そんな時に発生しやすいのがこのトラブル。メールアドレス形式で入力していればちゃんと送信されるのに、この「あああ」が原因だと気付かないと、他のコードを追って泥沼にハマることになってしまいます。
そのため、送信確認の際は下記のようにメールアドレス形式でFromを指定してあげる必要があります。
<?php mb_language("ja"); mb_internal_encoding("utf-8"); $to="xxxxx@520328.jp"; $subject="お問い合わせ"; $msg="メッセージが入ります。"; $from = "zzzzz@520328.jp"; $header="From: {$from}\nReply-To: {$from}\nContent-Type: text/plain;"; if(mb_send_mail($to,$subject,$msg,$header)){ echo "メールが送信されました。"; } else { echo "メールが送信できませんでした。"; } ?>
この記述ならちゃんとメールが送信されます。
ハマると抜け出しにくい、mb_send_mailでメールが送信できない時に確認すべきことでした。