初心者も分かるようPHPメールフォームを解説
何かもう、引数多すぎるmb_sendmail()
メール送信実行全てを担うmb_sendmail関数なんですが、全部で第5引数まで存在し、全て設定しないと迷惑メールフォルダに振り分けられる可能性が上がるので 全て正確に設定しなければなりません。
mb_send_mailの設定内容
mb_send_mail("送信先メールアドレス","メールのタイトル","メール本文","メールのヘッダー","送信エラーになったらエラーを返す場所");
これ全部が設定されていれば、メールが正常に空いてに送信されるわけですね。
send.phpの送信実行プログラムの中身
session_start();//ページ移動したら再びsession_start //Sessionが正しくセットされていなければリダイレクト //今回のケースだと、名前入れてないわけないでしょ!ということでリダイレクトを。exit();でもOK。 if($_Session['name']==""){ header('Location: http://www.example.com/');// headerlocationはPHPのリダイレクト処理でよく使う。 } $add_header="From:[email protected]\n";//送信者の情報(メールヘッダー) $add_header .= "Reply-to: [email protected]\n";//送信者の情報(メールヘッダー) $add_header .= "X-Mailer: PHP/". phpversion(); $opt = '-f'.'[email protected]'; //-fすると迷惑メールになりにくいとか、そんなことだったと思う。送信エラーの時にエラーメールを返す先 //以下ヒアドキュメント<<<●● HTMLでも、文字列でも、何いれてもOK●●; //ヒアドキュメントは、メール送信とかの定型文を書いたりするとき、あとはSQLを書くときも使うかな。 //ヒアドキュメント内ではPHPのプログラムは一切かけない。変数だけ。変数は{}で囲ってあげること //メールの本文をここでひとまとめに。 $message =<<<HTML お問い合わせ内容の確認です。 お名前 {$_SESSION['name']} E_mail {$_SESSION['e_mail']} お問い合わせ内容 {$_SESSION['comment']} 内容確認後、担当者より折り返しご連絡をさせて頂きます。 今しばらくお待ちください。 HTML; // カレントの言語を日本語に設定する mb_language("ja"); // 内部文字エンコードを設定する このエンコード指定は大昔の携帯だとShift-jisにしないとだめだったとか。 // 今はUTF-8にしておけばだいたいOKだから、楽な時代になったもんだよ。 mb_internal_encoding("UTF-8"); mb_send_mail($_SESSION['e_mail'],"【お問い合わせ】確認メール",$message,$add_header,$opt); //mb_send_mailは5つの設定項目がある //mb_send_mail(送信先メールアドレス,"メールのタイトル","メール本文","メールのヘッダーFromとかリプライとか","送信エラーになったらどこにメール返すんじゃいっ!"); //5番目の情報は第5引数と呼ばれるものでして、これがないと迷惑メール扱いになることも。 //マスター管理者にもお問い合わせがあったことを知らせる mb_send_mail('[email protected]',"問い合わせがありました",$message,$add_header,$opt); session_destroy(); // セッションを破棄
ちょっとしたものをメールで送信するだけでもこれだけ書かなければなりません。
が、ほとんどがメールの送信者情報のメールヘッダーに関することだったり、mb_○○は文字コードの指定だったりと、文字化けに関することだったり。
私もメールフォームを作るたびにこれらを毎回書いているわけではありません。
ですから、この送信実行に関するところは適当にコピペして使って下さい。
基本的にはうまく$_SESSIONにデータを引き継ぐことが出来れば送信が実行できます。
ヒアドキュメントだけ解説
ヒアドキュメントは、ある変数に長い文章などを代入させたいときに便利に使えます。
PHP内でちょっとHTMLを書くとエラーになりますが、
ヒアドキュメント内では何を書いても問題ではありません。
<<<HTML
この部分に
HTML;
この部分に
HTML;
別にHTMLじゃなくても、名称は何でもOK
ただし、プログラムは一切書くことが出来ませんのであらかじめ内容は変数に全て格納を終わらせておかなければなりません。
また、ヒアドキュメント内部に変数を書くときは
<<<HTML
{$hoge}
HTML;
{$hoge}
HTML;
このように{ }が必要になります。
ヒアドキュメント内では改行もそのまま反映されますから、改行タグを入れる必要もなく、便利です。
では送信実行はこれくらいにして、HTMLフォームの正しい書き方を説明します。