PHPでメール送信を実装する方法

PHPを使って簡易メールフォームを作成したので、作り方をまとめておきたいと思います。
今回作成したのは入力した内容を、一度確認画面で表示して送信するタイプのメールフォームです。
作り方
役割ごとに3つのファイルを作成します。
- mail.php → メールを作成するフォームを表示する画面。
- confirm.php → 入力した内容を確認する画面。
- complete.php → メールの送信結果を表示する画面。
mail.php
メールの内容を入力するためのフォーム画面を作成します。下記のコードをファイル名「mail.php」で保存します。
入力フォームは「宛先」「件名」「本文」を用意しました。
<!DOCTYPE html> <html> <head> <title>Sample Mail</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div> <form method="post" action="confirm.php"> <p>宛先 <input type="text" name="to" /></p> <p>件名 <input type="text" name="title" /></p> <div> <textarea name="content" rows="4" cols="40">ここにメールの本文</textarea> </div> <input type="submit" name="send" value="送信内容を確認" /> </form> </div> </body> </html>
<form method="post" action="confirm.php">のactionに確認画面のファイルを記入します。

confirm.php
送信する内容を確認する画面を作成します。下記のコードをファイル名「confirm.php」で保存します。
<?php $to = $_POST['to']; $title = $_POST['title']; $content = $_POST['content']; ?> <!DOCTYPE html> <html> <head> <title>Sample Mail</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div> <p>宛先 <?php echo $to; ?></p> <p>件名 <?php echo $title; ?></p> <p><?php echo $content; ?></p> </div> <form method="post" action="complete.php"> <input type="hidden" name="to" value="<?php echo $to; ?>"> <input type="hidden" name="title" value="<?php echo $title; ?>"> <input type="hidden" name="content" value="<?php echo $content; ?>"> <input type="submit" name="send" value="送信" /> </form> </div> </body> </html>
入力された値を、それぞれを$to$title$contentの変数に格納して表示しています。
inputのtype属性にhiddenを指定することで、送信する値を表示せずに保持しています。

complete.php
メールを送信して、送信の結果を表示する画面を作成します。下記のコードをファイル名「complete.php」で保存します。
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = $_POST['to'];
$title = $_POST['title'];
$content = $_POST['content'];
$message = "送信エラー";
if(mb_send_mail($to, $title, $content)){
$message = "メールを送信しました";
} else {
$message = "メールの送信に失敗しました";
};
?>
<!DOCTYPE html>
<html>
<head>
<title>Sample Mail</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
<p>送信結果 < <?php echo $message; ?></p>
</div>
</body>
</html>
mb_send_mailでメールの送信を行います。
さらに、if文でmb_send_mailの結果がTRUEであれば「メールの送信が完了しました」、入力漏れなどによって結果がFALSEになった場合は「メールの送信に失敗しました」と出力されるように設定しています。

実際に送信して、結果が表示されれば完成です。
今回は、POSTを使った値の受け渡しの部分をピックアップして書きました。 一応このままでも動作しますが、ここに入力チェックやセキュリティー対策も追加する必要があります。


