メールフォーム

Web

mb_send_mail()で届かなかったり文字化けしたりを解消

メールフォームを作成する必要があり、色々調べて発見があったので、メモ。お問い合わせフォームを作成するにあたり、セキュリティや送信方法について調べることに。投稿部分はフォームタグを使わず、jsで確認画面やサンキュー画面を表示させることにしました。データベースとの連動もないことから、エスケープ処理など最低限必要と考えられる対策を実施します。メール送信方法はmb_send_mail()を採用することに。ただ、メールが届いたり、届かなかったりといった現象が発生し、文字化けが一部箇所やiPhoneであらわれたりと一筋縄ではいきません。ネットの海で探し求めていると、ありました!解決の糸口が!

PHPでメールを送る際の文字化けや迷惑メール対策 | 株式会社デジナーレ [designare corp.]
メール送信トラブル!PHPでのメッセージ配信がうまくいかない時の対処法
解決方法特定のメールアドレスにメールが届かないトラブルに直面した場合、以下の解決方法があります。Return-Pathの…

上記を参考にしながら、組み立てます。mb_send_mail()の5つめの引数に-fを設定するのが肝のようで、送信先に追加。これとheaderSender:Return-Path:Reply-To:などを加えると安定して、メールが届くようになったのです。※上記を読むとそれら全部入れる必要はないみたい。mb_send_mail()を安定稼働させる肝はheaderの設定にあるようで、文字化けもContent-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: BASE64を加えると手持ちの機器では文字化けが見られませんでした。ナイス!

$toAdmin = "xxx@xxx.jp";
$fromName = mb_encode_mimeheader("日本語OKの差出人名", "UTF-8");
$header = "Content-Type: text/plain; charset=UTF-8 \n";
$header .= "From: ". $fromName ."<". $toAdmin ."> \n";
$header .= "Sender: ". $toAdmin. " \n";
$header .= "Return-Path: ". $toAdmin. " \n";
$header .= "Reply-To: ". $toAdmin. " \n";
$header .= "Content-Transfer-Encoding: BASE64 \n";

$mail = mb_send_mail('oooo@oooo.jp', 'タイトルだよ', '本文だよ', $header, '-f oooo@oooo.jp');
if ($mail) {
  echo "送信終了";
} else {
  echo "失敗だよ";
}

コメント