Edited at

Mailtrapを使ってPHPで開発時にメール送信のテストを行う

Mailtrapを使ってPHPで開発時にメール送信のテストを行う|Ewig Leere(Lab)と同じ内容ですがこちらにも記しておきます。


個人的なことですが、PHPでメールフォーム等を作成する際にローカルの開発環境ではメールサーバがないとテストができないことが度々課題になっていました。

そこで今回「Mailtrap」というWebサービスを利用してみることにしました。

こちらのサービスを利用すればメール送信の実装をしつつ、メールそのものは実際の宛先には送られず、上記サービスの中に蓄積され、WebサイトやAPIで確認ができるという形になります。

誤送信を防ぎつつメールのテストができるということでありがたいサービスです。

以下、使い方をメモしておきます。


1. 登録~設定

Webサービスなので登録から。

Mailtrapのトップページから右上の「Sign up」をクリックします。

Sign upを開始

アカウントはGoogleやGithubと連携できますが、今回は一番下のメールアドレスで登録します。

メールアドレスとパスワードを入力

メールアドレスとパスワードのテキストボックスが表示されるので、入力します。reCAPTCHAもチェックして「Sign up」。

確認メール送信完了画面

「確認メールを送ったよ!」という画面が表示されます。

入力したメールアドレスに確認メールが飛んでくるので、メール内のリンクをクリック。

届いたメールのリンクからLog in

リンク先はログイン画面になっているので、先ほど登録したメールアドレスとパスワードを入力して「Log in」。

ダッシュボードに受信箱が1つあることを確認

ログインすると初期の受信ボックスである「Demo Inbox」が存在しています。なお、無料プランで利用できる受信ボックスはこの「Demo Inbox」の1つだけのようです。

各言語・フレームワークでの設定項目を確認

「Demo Inbox」を開くと空の受信ボックスが開きます。「SMTP Settings」タブでは各種言語・フレームワークでの設定方法が記載されており、基本的にはこれに従って設定をしていくことになると思います。

ちなみに、画面に表示されているUsername, Passwordは下記コード中に記述します。もちろん、他の情報も合わせます。

ということで、Mailtrap上での準備はここまでで、以下実際のコードを書いていきます。


2. コードの編集(PHPMailerを使用)

ところで、今回の場合はPHP標準のmb_send_mailを使うメールフォームでした。が、mb_send_mailはポートやホストの設定ができない上に、そもそも認証も何もあったものではないのでこのままではどうしようもありません。

ということで、PHPMailerというライブラリを利用することにします。

composer require phpmailer/phpmailer

してライブラリをダウンロード。


メール送信部

<?php

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

require __DIR__ . "/vendor/autoload.php";
require __DIR__ . "/config.php";

//phpmailerを使用してメール送信
//引数) $body: メール本文
function phpmailerSend($body) {
$mail = new PHPMailer();

$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = MAIL_HOST;
$mail->Username = MAIL_USERNAME;
$mail->Password = MAIL_PASSWORD;
$mail->SMTPSecure = MAIL_ENCRPT;
$mail->Port = SMTP_PORT;

//メール内容設定
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
$mail->setFrom(FROM_MAIL, FROM_MAIL);
$mail->addAddress(TO_MAIL, TO_MAIL);
$mail->Subject = SUBJECT;
$mail->isHTML(false);
$mail->Body = $body;

//メール送信の実行
return $mail->send();
}

//処理
$flag = phpmailerSend($body);
if(!$flag) {
//エラー処理
}


設定ファイル(config.php)

<?php

define('MAIL_HOST','smtp.mailtrap.io'); //Host
define('MAIL_USERNAME','xxxxxxxxxx'); //Username
define('MAIL_PASSWORD','xxxxxxxxxx'); //Password
define('FROM_MAIL','test@from.example.com');
define('TO_MAIL','test@to.example.com');
define('SUBJECT','メール件名');
define('MAIL_ENCRPT','tls'); //TLS
define('SMTP_PORT', 2525); //Port

こんな感じでメール送信部の処理と設定ファイルを用意します。


3. 実行結果

上記のコードをベースにしたフォームを作成し、送信テストを実行。

Demo Inboxにメールが届いたのを確認

「Demo Inbox」にフォームの内容が蓄積されたので成功です。


参考


Mailtrap


PHPMailer