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

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を使った値の受け渡しの部分をピックアップして書きました。 一応このままでも動作しますが、ここに入力チェックやセキュリティー対策も追加する必要があります。