PHPで入力されたメールアドレスにメールを送信するサンプルでForm処理をイメージする

HTTPとは何か。formタグはどう使うか。PHPとは。について今まで解説しました。

HTTPリクエストやレスポンスが何か。

formタグが何かが分かっても実際に使ってみないとなかなか身につきません。

今回は入力されたメールアドレスにメールを送信するだけというシンプルなサンプルコードを使ってformやPHPでの処理の書き方について説明します。

目次

Formサンプルのコード

  • 画面にメールアドレス入力欄と送信ボタンがある。
  • 送信ボタン押下で、入力されたメールアドレスにメールを送信する。
  • 入力されていない場合や、メールアドレスの形式として不正な場合はエラーとする。

細かく書けば他にもあるけど、仕様はざっとこんな感じです。

画面は1つしかなく、送信後は同じ画面を表示します。

<?php
$mail = "";
if (isset($_POST["youremail"])) {
  $mail = $_POST["youremail"];
  if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) {
    $from = "test@example.com";
    $subject = "サンプルフォームからのメール送信";
    $message = "{$mail}にメールを送信しました。\r\n届きましたか?";
    $header = "From: {$from}\r\nReply-To: {$from}\r\n";
    $result = mb_send_mail($mail, $subject, $message, $header);
    if ($result) {
      $msg = "正常にメールを送信しました。";
    } else {
      $msg = "メールの送信に失敗しました。";
    }
  } else {
    $msg = "メールアドレスが不正です。";
  }
} else {
  $msg = "";
}
?>
<html>
  <head>
    <meta charset="UTF-8">
    <title>PHPテスト</title>
    <meta name="description" content="このページの概要を書く">
    <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <?php echo $msg; ?>
    <form action="form.php" method="POST">
      <p>メールアドレスを入力してください。</p>
      <input type="text" name="youremail" value="<?php echo $mail;?>">
      <input type="submit" value="送信">
    </form>
  </body>
</html>

コード解説

HTMLのコードはそれほど難しくないので割愛しますが、一部だけ。

HTML内の <?php echo $msg; ?> は、送信完了したり送信に失敗した場合にメッセージを表示するものです。

<input type=”text” name=”youremail” value=”<?php echo $mail;?>“> と、メールアドレスを入力するフォームの value にPHPコードが埋め込まれています。

これは、送信後に入力したメールアドレスが入力されたままの状態になるようにするものです。

 

2行目

$mail = "";

これは、初期表示時などにメールアドレスを受け取れない場合、34行目で出力しようとすると「$mail?そんな変数ないですよ!」って怒られないために最初に空で宣言しています。

じゃ $msg は?となります。$msg に関してはその後の if 文のどこに入っても $msg 変数が宣言されるため問題ないです。

 

3行目

if (isset($_POST["youremail"])) {

これは、メールアドレスがPOSTデータにセットされているかどうかを判定しています。

これで同時にPOSTされたリクエストかどうかの判定が出来ます。

もしセットされていれば、4行目の $mail = $_POST[“youremail”]; で入力値を取得します。

 

5行目

if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) {

これは入力された値がメールアドレスの形式かどうかをチェックしています。

メールアドレスは半角英数だったり間に@が入っていたり、@の後に.が使われていたりなどの形式があります。

今回はこちらのサイトを参考にメールアドレスの形式についてチェックしました。

 

6-9行目

$from = "test@example.com";
$subject = "サンプルフォームからのメール送信";
$message = "{$mail}にメールを送信しました。\r\n届きましたか?";
$header = "From: {$from}\r\nReply-To: {$from}\r\n";

これはメール送信をする為の設定値です。

$from は送信元のメールアドレスです。

$subject は、メールの件名です。

$message は、メールの本文です。

$header は、普段メールを使っているだけではあまり見えない部分です。

ヘッダーと言って、ここでは送信元のメールアドレスや返信先のメールアドレスを設定しています。

 

そして、10行目

$result = mb_send_mail($mail, $subject, $message, $header);

ここでメール送信をします。

PHPには mb_send_mail() という関数があり、日本語のメール送信に使えます。

mb_send_mail() の戻り値を $result 変数に格納しています。メールが成功すれば true 失敗すれば false になります。

なので、11-15行目で

if ($result) {
  $msg = "正常にメールを送信しました。";
} else {
  $msg = "メールの送信に失敗しました。";
}

のようにメッセージを設定します。

まとめ

今回のサンプルで form タグの使い方や、formで送信した値をPHPで受け取る方法についてイメージできたと思います。

今回は1ページだけで作成しましたが、通常は確認画面や送信完了画面などを作成し、そちらでメール送信したりします。

簡単なコードですが、PHPの流れが分かるサンプルだと思うので、しっかりイメージしてください。

この記事を書いた人

ライターのプロフィールが入ります。このライター情報を入れたくない場合は管理画面の ユーザー > あなたのプロフィールの「プロフィール情報」を未入力にすれば表示されません。逆に「プロフィール情報」を入力することでライター情報を表示できます。

コメント

コメントする

CAPTCHA


目次
閉じる