2014年12月4日

mb_send_mailでメールが送信できない時に確認すべきこと

mb_sendmail

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でメールが送信できない時に確認すべきことでした。

, ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です