小金井にあるWEB制作会社の備忘録

MEMORANDUM

PHPでHTMLメールを送信

通常メールの送信用メールフォームは以前から作成していましたが、HTMLメールの送信用にフォームを作成する機会があったので方法をメモ。

HTML

<form method="post" action="sendmail.php">
<dl class="table">
<dt>送り主メールアドレス</dt>
<dd><input type="text" name="frommail"></dd>
<dt>送り主名前</dt>
<dd><input type="text" name="fromname"></dd>
<dt>宛先メールアドレス</dt>
<dd><input type="text" name="email"></dd>
<dt>件名</dt>
<dd><input type="text" name="subject"></dd>
<dt>HTMLメール本文</dt>
<dd><textarea name="html"></textarea></dd>
</dl>

<ul class="btnSubmit">
<li><input type="submit" name="submit" value="送信する"></li>
</ul>
</form>

PHP(sendmail.php)

if(!empty($_POST['submit'])){
	foreach($_POST as $key => $value){
		$dt[$key] = htmlspecialchars($value, ENT_QUOTES, "utf-8");
		$dt[$key] = mb_convert_kana($dt[$key], "KVa", "UTF-8");

	}

	//エラー処理は省略

	if(empty($dt['error'])){
		$mail_from = $dt["frommail"];
		$mail_to = $dt["email"];
		$mail_from_name = $dt["fromname"];
		$subject = $dt["subject "];
		$message = html_entity_decode($dt["html"], ENT_QUOTES, 'UTF-8')."\r\n";
		$headers = "From: ".mb_encode_mimeheader($mail_from_name)."<".$mail_from.">". "\r\n";
		$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
		
		mail($mail_to, $subject, $message, $headers);
		echo("メール送信成功です");
		exit();
	}
}

通常のメールと異なる点はヘッダーで「Content-type」を設定する部分と、HTML本文の部分で「html_entity_decode」を使い入力値をデコード処理するところ。