PHPで問い合わせフォームを作り、最後の送信完了画面で
管理者に受診通知メール、応募者には受付完了の通知メールを作ろうとしています
それで、そのロジックを以下のように作っています
PHP
1$to = "master@hoge.com";//管理者のメアド 2$user_name = $_POST['user_name'];//フォーム項目:応募者の名前 3$user_msg = $_POST['user_msg'];//フォーム項目:メッセージ 4$user_mail = $_POST['user_mail'];//フォーム項目:応募者のメールアドレス 5 6$content = "名前:".$user_name."\n"; 7$content .= "メールアドレス:".$user_mail."\n"; 8$content .= "お問い合わせ内容:".$user_msg."\n"; 9$headers = "From:問い合わせフォーム<server@hoge.com>"; 10$pfrom = "server@hoge.com"; 11 12//管理者向けの送信処理 13if(mb_send_mail($to, '問い合わせを受付ました', $content, $headers, $pfrom)){//送信成功 14 $to_user = $user_mail; 15 $content_user = "お問い合わせありがとうございました。以下の内容で受け付けました。\n"; 16 $content_user .= "--------------\n"; 17 $content_user .= "お名前:".$user_name."\n"; 18 $content_user .= "メールアドレス:".$user_mail."\n"; 19 $content_user .= "お問い合わせ内容:".$user_msg."\n"; 20 $content_user .= "--------------\n"; 21 $headers_user = "From:問い合わせフォーム<noreply@hoge.com>"; 22 $pfrom_user = "noreply@hoge.com"; 23 if(mb_send_mail($to_user, 'お問い合わせありがとうございました', $content_user, $headers_user, $pfrom_user)){//送信成功 24 //完了画面にリダイレクト 25 }else{//送信失敗 26 print "ユーザー向け送信失敗"; 27 } 28 29}else{//送信失敗 30//エラー画面にリダイレクト 31}
見ての通り、まず管理者向けに通知メールを送り、それに成功したらユーザーに受診完了のメールを送る構造です。
この形で、両者にメール送信完了しているのに、どういうわけか完了画面にリダイレクトされず
「ユーザー向け送信失敗」と画面に出力されてしまいます。
何がおかしいのでしょうか?
ユーザーへのメール処理を加える前、管理者向けの送信しかしていなかったときは
PHP
1if(mb_send_mail($to, '問い合わせを受付ました', $content, $headers, $pfrom)){//送信成功 2 //完了画面にリダイレクト処理 3} 4``` 5として正常にリダイレクトできていました。 6 7うまくいかない原因をご指摘いただけると嬉しいです。 8また、こういう「管理者の送信者にメールを送るシステム」を作るのは初めてなのですが、この構造がおかしくないか 9もっと一般的で効率的・信頼性の高い作り方があれば教えていただけると幸いです。 10よろしくお願いします。
$headers で与えているヘッダ、UTF-8な文字列をそのまま与えて大丈夫なんだっけか。
Return-Path:も書いてみるとか、ネット上の実装例を探して真似してみると良いかも。
https://qiita.com/lelouch99v/items/e554401e6017574eca9a
こちらの実装例は、ヘッダーを丁寧に仕込んでいたりするようです。(文字化け対策として)
回答2件
あなたの回答
tips
プレビュー