フリーPHPスクリプト配布サイト。
PHPではメール送信用の関数が用意されているため、メール送信プログラムを簡単に作成することができます。
多くのプロバイダでは、迷惑メールが大量に送信されるのを防ぐための対策が行われています。その影響で、WindowsにインストールしたPHPからはメールが送信できないことがあります。このページのプログラムを実行した際に以下のようなメッセージが表示される場合、メールの送信に失敗しています。
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
プロバイダから回避方法が告知されていることもありますが、環境によって設定方法が異なるため、ここでは触れません。メールが送信できなければ、一時的にレンタルサーバーにアップロードして動作確認をするなどしてください。(不正アクセスを防ぐため、動作確認が終わったらアップロードしたファイルを削除してください。)以下の解説は、メールの送信ができる環境であることを前提としています。
メールの送信は mail
関数で行うことができます。
<?php
if (mail("example@example.com", "TEST MAIL", "This is a test message.", "From: from@example.com")) {
echo "メールが送信されました。";
} else {
echo "メールの送信に失敗しました。";
}
?>
これで、example@example.com
に対して、TEST MAIL
という件名で、This is a test message.
という本文のメールが送信されます。送信元のアドレスは from@example.com
になります。
mail
関数は処理の結果として、メールの送信に成功すれば TRUE
を、メールの送信に失敗すれば FALSE
を返します。つまり、メール送信処理を if
の条件にすることにより、「メールの送信が実行できたかどうか?」を判断しています。
ただ、mail
関数でメールを送信すると、日本語が文字化けしてしまう可能性があります。なので通常は、日本語に対応した mb_send_mail
関数を使用します。具体的には以下のようになります。
<?php
if (mb_send_mail("example@example.com", "テストメール", "これはテストです。", "From: from@example.com")) {
echo "メールが送信されました。";
} else {
echo "メールの送信に失敗しました。";
}
?>
これで、example@example.com
に対して、テストメール
という件名で、これはテストです。
という本文のメールが送信されます。ちなみに、本文中で改行したければ \n
と書きます。
それでも文字化けしている場合、mb_language
関数と mb_internal_encoding
関数で言語と文字コードを指定してみてください。
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
if (mb_send_mail("example@example.com", "テストメール", "これはテストです。", "From: from@example.com")) {
echo "メールが送信されました。";
} else {
echo "メールの送信に失敗しました。";
}
?>
これらはPHPの言語設定と文字コード設定を調整する命令で、今回は「言語は日本語」「文字コードはUTF-8」に設定しています。これらの命令は、PHPの設定ファイル(php.ini
)で言語設定や文字コード設定が適切に行われていれば不要です。
ですがレンタルサーバーなどでは設定がされていなかったり、他の言語や文字コードが設定されていて変更できないことがあります。そのような場合、メール送信前にこの命令を書いておけば、文字化けを防ぐことができます。
フォームからデータを入力すると、PHPでメールが送信できるプログラムを作成してみます。今回は、以下のHTMLでフォームを作成します。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<form action="send.php" method="post">
件名:<br />
<input type="text" name="subject" size="30" value="" /><br />
送信者名:<br />
<input type="text" name="name" size="30" value="" /><br />
メールアドレス:<br />
<input type="text" name="mail" size="30" value="" /><br />
本文:<br />
<textarea name="message" cols="30" rows="5"></textarea><br />
<br />
<input type="submit" value="送信する" />
</form>
</body>
</html>
ファイル名は form.html
としておきます。これをブラウザで表示すると、以下のように表示されます。
このフォームからメールを送信する場合、form.html
と同じフォルダに send.php
を作成し、以下の内容を書きます。
<?php
$message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"];
if (!mb_send_mail("example@example.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) {
exit("error");
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<p>メールが送信されました。</p>
</body>
</html>
これで form.html
に http://
でアクセスし、送信ボタンを押すと example@example.com
にメールが送信されます。
if (!mb_send_mail(~)) { ~ }
は「メールが送信できなければ」という条件です。mb_send_mail
関数は処理の結果として、メールの送信に成功すれば TRUE
を、メールの送信に失敗すれば FALSE
を返すため、条件の先頭に !
を付けることにより、メールの送信に失敗したときにエラーメッセージを表示させることができます。(参考)
exit()
はプログラムを終了するための命令です。カッコの中に文字列を指定すると、その文字列を出力してからプログラムを終了します。これにより、メールが送信できなかった場合は メールが送信されました。
の文字列が表示されなくなります。