お問い合わせフォームを作ってみる -実装編④:入力内容送信後の自動返信メール機能実装-

こんにちは、ユアサです。
前回の記事では、エラー時の処理と値を保持する処理を実装しました。今回は、最後の機能である自動返信メール機能を実装します。

↓前回の記事 tech.arms-soft.co.jp

PHPMailerのインストール

PHPMailerはComposerを使用してインストールしていきます。

$ composer require phpmailer/phpmailer  # PHPMailer をインストール

メール受信サービス「Mailtrap」

確認画面で送信内容を確認した後、送信するボタンをクリックすると完了画面に遷移します。
その際に、入力した値が渡され、完了画面が表示されると同時に自動送信メールが届くような仕様にしていきます。
しかし、メール送信のテストをする度にGmailなどのメールサービスではスパム扱いされ迷惑メールフォルダに勝手に移動されてしまうことがあるので、今回はテスト用に使用されるメール受信サービスの中でも有名な「Mailtrap」を使用していくことにします。

↓Mailtrapの公式ホームページへのリンクです。 mailtrap.io

使用するまでの手順ですが、まずMailtrapのページでサインアップします。 f:id:Felly00505:20210307223315p:plain

ログインすると以下のような画面が表示されるようになるので、「My Inbox」をクリックします。 f:id:Felly00505:20210307223539p:plain

My Inboxに移動後、「Integrations」のプルダウンで形式を選択すると、 Mailtrapの環境設定のコードが表示されます。(この記事ではcURLです) f:id:Felly00505:20210307223813p:plain

完了画面

先ほど発行したMailtrapの環境設定のコードを完了画面に設定します。
値の受け取りやメール文章、PHPMailer等を設定し、以下のコードが完成したものになります。

<?php
// Composer のオートローダーの読み込み
require 'vendor/autoload.php';
//エラーメッセージ用日本語言語ファイルを読み込む場合
require 'vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php';  

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;  

// 値の受け取り
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$contents = $_SESSION['contents'];
$remarks = $_SESSION['remarks'];

// メール内容
$mail_body = '<h1>' .$name. 'さん</h1><br>
              <p>お問い合わせ内容はこちらです。</p>
              <p>メールアドレス:' .$email. '</p>
              <p>お問い合わせ内容:' .$contents. '</p>
              <p>備考:' .$remarks. '</p>';

//言語、内部エンコーディングを指定
mb_language("japanese");
mb_internal_encoding("UTF-8");

// インスタンスを生成(引数に true を指定して例外 Exception を有効に)
$mail = new PHPMailer(true);

//日本語用設定
$mail->CharSet = 'UTF-8'; //文字化け防止

//エラーメッセージ用言語ファイルを使用する場合に指定
$mail->setLanguage('ja', 'vendor/phpmailer/phpmailer/language/');

try {
    //サーバの設定
    $mail->SMTPDebug = 0;  // デバッグの出力を有効に(テスト環境での検証用)
    $mail->isSMTP();   // SMTP を使用
    $mail->Host       = 'smtp.mailtrap.io';  // SMTP サーバーを指定
    $mail->SMTPAuth   = true;   // SMTP authentication を有効に
    $mail->Username   = '○○○';  // SMTP ユーザ名
    $mail->Password   = '×××';  // SMTP パスワード
    $mail->SMTPSecure = 'tls';  // 暗号化を有効に
    $mail->Port       = 2525;  // TCP ポートを指定

    //受信者設定
    //※名前などに日本語を使う場合は文字エンコーディングを変換
    //差出人アドレス, 差出人名
    $mail->setFrom('from@example.com', 'ユアサのお問い合わせフォーム');
    //受信者アドレス, 受信者名(受信者名はオプション)
    $mail->addAddress($email, $name);

    //コンテンツ設定
    $mail->isHTML(true);   // HTML形式を指定
    //メール表題(文字エンコーディングを変換)
    $mail->Subject = mb_encode_mimeheader('お問い合わせフォームのメールです。', 'ISO-2022-JP');
    //HTML形式の本文(文字エンコーディングを変換)
    $mail->Body  = $mail_body;

    $mail->send();  //送信
    session_destroy(); 
} catch (Exception $e) {
    //エラーが発生した場合
    exit;
}
?>

<!DOCTYPE>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム 完了画面</title>
    <link href="sample.css" rel="stylesheet">
</head>
<body>
<h1>お問い合わせフォーム</h1>
<div>
        <h3>送信完了!</h3>
        <p>お問い合わせいただきありがとうございます。</p>
        <p>送信完了いたしました。</p>
</div>
</body>
</html>

では実際に正しく送信できるかどうか動作確認していきます。
全項目エラーが無いように入力し、確認画面から完了画面へ遷移するところまで動作させます。 f:id:Felly00505:20210309191413j:plain 完了画面まで遷移できました。Mailtrapの方で自動送信メールが届いているか確認します。

f:id:Felly00505:20210309175500p:plain

入力内容が反映され、自動送信メールが届いていました!
これで当初想定していた機能は一通り実装できました。

まとめ

今回はPHPMailerとメール受信サービス「Mailtrap」を使用して、自動返信メールの機能を実装しました。
今回の記事でお問い合わせフォームを作ってみるシリーズは終了となりますが、今後は気になるライブラリなどの記事を書いていければと思います。
最後まで読んでいただきありがとうございました(^人^)