メールを送る(1)

「当社へのご連絡・お問合せは次のフォームをご利用ください」などとして,書き込まれた内容を担当者にメールするためのものです。実際にはメールは送られませんし,情報も収集していません。

あなたのメールアドレス:

メッセージ:

ソース

次の例は だれだれ@どこどこ さんにメールを送るためのものです。必ず送り先を自分の正しいメールアドレスに変えてください(全角文字に注意してください)。

<form method="post" action="mail.php">
<p>あなたのメールアドレス:<br>
<input name="email" size="60">
</p>
<p>メッセージ:<br>
<textarea name="message" rows="8" cols="60"></textarea><br>
<input type="submit" value="送る">
<input type="reset" value="消去">
</p>
</form>

<?php
  if (isset($_POST['email'], $_POST['message']) && $_POST['email'] != "" && $_POST['message'] != "") {
    mb_send_mail(
      "だれだれ@どこどこ",       // 宛先
      "フォームからのメール",     // 件名
      $_POST['message'],          // 本文
      "From: {$_POST['email']}",  // 追加ヘッダ
      "-f だれだれ@どこどこ");   // エラー宛先(Return-Path)
    echo "<p>メールを送りました。</p>";
  }
?>

ご注意:

メールアドレスのチェック

上のプログラムではメールアドレスの正当性をチェックしていません。

メールアドレスのルールはWikipediaの E-mail address の項目に詳しく書いてあります。

しかし日本の携帯キャリアの中には,ピリオドで始まるアドレス,「@」直前のピリオド,連続したピリオドなど,ルール違反のメールアドレスを許すものがあります。さらに,RFC 6531 の時代になれば,Unicode(UTF-8)の文字が使えるようになります。

たとえ厳密にチェックしたとしても,綴りの間違い(例えば docomo を dokomo と綴るなど)はとてもチェックできません。しかし,まったくチェックしないと,例えばアドレス中に改行文字を埋め込むことができれば,意図しないヘッダを捏造することが可能になります。

下の例では,制御文字とスペース(0x00〜0x20)を含まないことと,「@」が一つだけ含まれることをチェックしています。簡単ですが,メールアドレス中に改行文字などの制御文字や空白を埋め込まれることは避けられます。

if (preg_match('/\A[^@\x00-\x20]+@[^@\x00-\x20]+\z/', $_POST['email'])) {
  // メールを送る
} else {
  echo "エラーです";
}

preg_match() は正規表現に文字列がマッチするか調べる関数です。古い ereg() という関数は現在は使用しないように勧められています。