Qdmail/Qdsmtpを使ったメール送信フォーム作成
公開日:2014年2月18日
最終更新日:2014年7月13日
Qdmailは、日本語に対応したメール送信ライブラリです。PHP標準のmb_send_mail()で発生しがちな文字化けを回避してくれます。Qdsmtpとともに使用すると、標準のmail()関数が使えない環境でも手軽にメール送信を行うことができます。
【コンテンツ】
【記事執筆時の環境】
PHP 5.4.7
Qdmail 1.2.6b
Qdsmtp 0.2.0a
Qdmail/Qdsmtpのダウンロードと利用準備
入手は、下記URLから行ってください。
Qdmail:http://hal456.net/qdmail/
Qdsmtp:http://hal456.net/qdsmtp/
ダウンロードしたzipファイルを展開し、
「qdmail.php」と「qdsmtp.php」の2つのファイルをサイトの適当なディレクトリに格納してください。
ここでは、'libs'というディレクトリに格納することにします。
メール送信するPHPファイル内で、以下のように記述し2つのファイルをインクルードします。
1 2 |
require_once 'libs/qdsmtp.php'; require_once 'libs/qdmail.php'; |
これで、Qdmail/Qdsmtpを利用する準備ができました。
入力フォームの作成
例えば、下図のような入力フォームを作成します。
コード例は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<form method="post" action=""> <table> <tr> <th>お名前<span class="required">[必須]</span></th> <td> <?php if (isset($errorName)): ?> <div class="error"><?php echo htmlspecialchars($errorName,ENT_QUOTES); ?></div> <?php endif; ?> <input type="text" name="name" size="20" value="<?php echo htmlspecialchars($name,ENT_QUOTES); ?>" /> </td> </tr> <tr> <th>フリガナ<span class="required">[必須]</span></th> <td> <?php if (isset($errorKana)): ?> <div class="error"><?php echo htmlspecialchars($errorKana,ENT_QUOTES); ?></div> <?php endif; ?> <input type="text" name="kana" size="20" value="<?php echo htmlspecialchars($kana,ENT_QUOTES); ?>" /> (全角カタカナ) </td> </tr> <tr> <th>メールアドレス<span class="required">[必須]</span></th> <td> <?php if (isset($errorEmail)): ?> <div class="error"><?php echo htmlspecialchars($errorEmail,ENT_QUOTES); ?></div> <?php endif; ?> <input type="text" name="email" size="35" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" /> (半角英数字) </td> </tr> <tr> <th>住所</th> <td> <textarea name="address" rows="5" cols="40"><?php echo htmlspecialchars($address,ENT_QUOTES); ?></textarea> </td> </tr> <tr> <th>お問い合わせ内容<span class="required">[必須]</span></th> <td> <?php if (isset($errorInquiry)): ?> <div class="error"><?php echo htmlspecialchars($errorInquiry,ENT_QUOTES); ?></div> <?php endif; ?> <textarea name="inquiry" rows="5" cols="40"><?php echo htmlspecialchars($inquiry,ENT_QUOTES); ?></textarea> </td> </tr> </table> <p id="btn"> <input type="submit" value="確認する" /> </p> </form> |
入力フォームにPHPコードの記述
入力フォームを作成したファイルの先頭に、PHPコードを記述します。
ここでは詳細は省きますが、以下のような処理コードが必要になります。
- セッションスタート
- 名前やメールアドレスに使用した変数の初期化
- セッション変数の読み出し
- 入力されたデータの取得
- 入力されたデータの検証
- エラーがなければセッション変数へデータを格納し確認画面へ移動
入力データ確認画面の作成
入力データを確認のために表示するフォームを作成し、ファイルの先頭に以下の処理コードを記述します。
- セッションスタート
- Qdmail/Qdsmtpライブラリのインクルード
- セッション変数の読み出し
- 修正ボタンが押されたら入力画面へ戻る
- 送信ボタンが押されたらメール送信
メール送信処理の記述
入力データ確認画面のファイルに、以下のように記述します。
送信するメール本文の作成
入力されたデータを読み出し、メール本文を作成します。
本文の作成には、PHPのヒアドキュメント構文を用い、以下のように変数に代入しておくと便利です。
1 2 3 |
$mailBody = <<<EOT ~本文の記述~ EOT; |
エラーメッセージの抑制
Qdmail/Qdsmtpでは、エラー発生時に画面にメッセージを表示するようにデフォルトで設定されています。
本番環境ではエラーメッセージを出力したくないので、次のコードをメール送信処理の最初に記述します。
1 2 3 |
$mail = new Qdmail(); $mail->errorDisplay(FALSE); $mail->smtpObject()->error_display = FALSE; |
Qdmailの基本設定
以下のように設定します。
1 2 3 4 5 6 |
$from = "webmaster@example.com"; $to = "admin@example.com"; $mail->from($from, "exampale.com Webマスター"); $mail->to($to,"exampale.com 管理者"); $mail->subject("Webサイトからお問い合わせがありました"); $mail->text($mailBody); |
SMTPの送信設定
以下のように設定します。
Gmailのアカウントで、SMTP AUTHによる送信の例です。
1 2 3 4 5 6 7 8 9 10 |
$param = array( "host" => "ssl://smtp.gmail.com", "port" => 465, "from" => "xxxxx@gmail.com", "protocol" => "SMTP_AUTH", "user" => "xxxxx@gmail.com", "pass" => "*****", ); $mail->smtp(TRUE); $mail->smtpServer($param); |
メール送信実行と終了処理
メール送信を実行し、送信が成功した場合はセッション変数を破棄して完了画面に移動します。
送信失敗の場合はセッション変数は破棄しないで、エラー画面に移動します。
記述例は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 |
$flag = $mail->send(); if ($flag == TRUE) { // 送信成功 unset($_SESSION["contact"]); header("Location: contact-success.php"); exit; } else { // 送信失敗 header("Location: contact-failure.php"); exit; } |
完了画面とエラー画面の作成
最後に、送信が成功した時に移動する完了画面と、送信が失敗した時に移動するエラー画面を作成します。
適切なメッセージを表示すればよく、PHPによる特別な処理は必要ありません。
スポンサーリンク