※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
また、実行に際しては、サーバーでPHPが利用できる事を前提に解説しています。
■ メール送信のテスト
今回はPHPでメール送信のテストを作成してみましょう。
このPHPもちょっと難しいところがあります。
まず、メール送信をするためにはサーバーが「sendmail」の利用を許可していないとダメです。
※「sendmail」とはメール送信を行うサーバープログラムです。
「sendmail」が許可されている場合は、サーバーの「CGIの設定」の解説ページにその呼び出し方法が記述されています。
わからない場合はサーバー管理者に問い合わせしてみてください。
なお、このメール送信をマスターしても、サーバーで大量のメール送信をしたり、サーバーに負担を掛けるとアカウントを抹消されたり、プロバイダから解約されたりすることがありますのでくれぐれもご注意下さい。
また、Windowsでのローカルテストは、通常そのパソコンには「sendmail」は無いのでテストできません。
- 【 解 説 】
-
まず、メール送信に最低限必要な情報は、「送信者のメールアドレス」、「受信者のメールアドレス」、「タイトル」、「本文」です。
今回は上記に加え、「送信者名」、「受信者名」も使ってみます。まずは「送信者名」、「送信者のメールアドレス」、「受信者名」、「受信者のメールアドレス」をそれぞれ次のように設定しておきます。
$frname = "atom"; $fradrs = "aaa\@ccc.ddd"; $toname = "atom"; $toadrs = "bbb\@ccc.ddd";次に、「タイトル」と「内容」も次のようにそれぞれ「$subject」、「$comment」にセットしておきます。
$subject= "メール送信のテスト\n"; $comment = "こんにちは。\n"; $comment .= "お元気でしょうか\n"; 表示文字列の最後にある「\n」はテキスト内の改行です。そして、上記の記述を使ってメール送信する場合は、次のように記述します。
$sdmail0 = "$toname<$toadrs>"; $mlhed = "From:\"$frname\" <$fradrs>\r\n"; $rslt = mb_send_mail($sdmail0,$subject,$comment,$mlhed);ただ、メールの内容や名前などが「shift_jis」で日本語の場合、サーバーによっては文字化けが発生する場合があります。
そこで、それらの対応方法を記述します。
まず、次のように記述し、メールの内容が「shift_jis」の日本語で作成された事をサーバーに教えます。
mb_language("ja"); mb_internal_encoding("sjis");次に、送信者名や宛て先名に日本語を使うと文字化けが発生するので、メールの標準文字コードである「iso-2022-jp」に変換します。
この変換に関しては、既に「mb_encode_mimeheader()」という命令がPHPにありますのでこれを使用して次のように記述します。
$frname0 = mb_encode_mimeheader($frname); $toname0 = mb_encode_mimeheader($toname);したがって、これらを先ほどの処理に組み込み、該当箇所を変更すると次のようになります。
mb_language("ja"); mb_internal_encoding("sjis"); $frname0 = mb_encode_mimeheader($frname); $toname0 = mb_encode_mimeheader($toname); $sdmail0 = "$toname0 <$toadrs>"; $mlhed = "From:\"$frname0\" <$fradrs>\r\n"; $rslt = mb_send_mail($sdmail0,$subject,$comment,$mlhed);
では、上記の内容を使用して「メール送信」を作成してみます。
処理結果が表示された方が解かりやすいので最後に送信内容の表示を追記しています。
- 【記述サンプル】
- <?php print <<< END_DOC <HTML> <HEAD> <title>送信完了!</title> </HEAD> <BODY> END_DOC; $frname = "atom"; $fradrs = "aaa@ccc.ddd"; $toname = "atom"; $toadrs = "bbb@ccc.ddd"; $subject = "メール送信のテストソフト\n"; $comment = "こんにちは。\n"; $comment .= "お元気でしょうか\n"; mb_language("ja"); mb_internal_encoding("sjis"); $frname0 = mb_encode_mimeheader($frname); $toname0 = mb_encode_mimeheader($toname); $sdmail0 = "$toname0 <$toadrs>"; $mlhed = "From:\"$frname0\" <$fradrs>\r\n"; $rslt = mb_send_mail($sdmail0,$subject,$comment,$mlhed); print "送信完了!<br><br>\n"; print "送信者名:$frname<br>\n"; print "送信者E-mail:$fradrs<br>\n"; print "宛て先:$toname<br>\n"; print "宛て先E-mail:$toadrs<br>\n"; print "タイトル:$subject<br>\n"; print "コメント:$comment<br>\n"; print <<< END_DOC </BODY> </HTML> END_DOC; ?>