メモ > サーバ > 各論: エトセトラ > MailHogでメールの受信をテストする
MailHogでメールの受信をテストする
ローカルでメール受信のテストに使える
Vagrantの場合は必要性はあまり感じないかもしれないが、ローカルのDocker環境などでは有効かも
MailHogでメール送受信のテストをする - Qiita
https://qiita.com/hideji2/items/1919d5759cf42146f919
■導入
# wget https://github.com/mailhog/MailHog/releases/download/v0.2.1/MailHog_linux_amd64
# chmod +x MailHog_linux_amd64
# ./MailHog_linux_amd64
2019/06/06 16:27:39 Using in-memory storage
2019/06/06 16:27:39 [SMTP] Binding to address: 0.0.0.0:1025
[HTTP] Binding to address: 0.0.0.0:8025
2019/06/06 16:27:39 Serving under http://0.0.0.0:8025/
Creating API v1 with WebPath:
Creating API v2 with WebPath:
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
「KEEPALIVE」の文字が表示されたら起動に成功していると思われる。初回は2〜3分かかるかも?
この状態で以下にアクセスすると、メールの一覧画面が表示された
このために Vagrantfile を編集したり…は不要だった
http://192.168.33.10:8025/
Ctrl+C で終了される
終了すると、上記画面も表示されなくなった
MailHog実行用に、ターミナルを1つ立ち上げておくと良さそう
■コマンドで送信
以下のようにすれば、コマンドからMailHog経由でメールを送信できる
$ echo "test" | mail -s "title" -S "smtp=smtp://localhost:1025" -r from@example.com to@example.com
$ echo "テスト。
これはテストです。" | mail -s "テストメール" -S "smtp=smtp://localhost:1025" -r from@example.com to@example.com
「-S」でSMTPサーバを指定できる
mailコマンドでSMTPサーバを指定してメール送信する方法 | ぴぐろぐ
https://pig-log.com/mail-smtp-linux/
■PHPからSMTPで送信
例えばPHPMailerを使用した場合、以下のようにすればMailHog経由でメールを送信できる
<?php
require_once 'PHPMailer/class.phpmailer.php';
require_once 'PHPMailer/class.smtp.php';
// SMTPサーバ: ホスト
define('SMTP_HOST', 'localhost');
// SMTPサーバ: 送信ポート
define('SMTP_PORT', '1025');
// メール送信準備
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = SMTP_HOST;
$mail->Port = SMTP_PORT;
// メール内容定義
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->setFrom('from@example.com', 'メール送信者');
$mail->addAddress('to@example.com', 'メール受信者');
$mail->Subject = 'MailHogからの送信テスト';
$mail->Body = "テスト。\r\nこれはMailHogからの送信テストです。";
// メール送信
if (!$mail->send()) {
exit('Error: ' . $mail->ErrorInfo);
}
exit('complete');
■PHPの mail 関数で送信
mhsendmailを追加導入すれば、PHPのメール送信関数からMailHog経由でメールを送信できる
# curl -sSLO https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64
# chmod +x mhsendmail_linux_amd64
# mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
# vi /etc/php.ini
mb_send_mail 関数で送信してMailHogで受信できる
ただしこの方法だと日本語メールは文字化けする
現状対処方法は見つけられていない
php.ini でSMTPサーバを指定する方法はあるようだが、Windows専用の設定らしい
dockerコンテナでPHPからのメール送信とhttpsに対応する - Qiita
https://qiita.com/kinoleaf/items/0b0002aa03993e58e2f0
■Dockerで利用
※未検証
dockerコンテナでPHPからのメール送信とhttpsに対応する - Qiita
https://qiita.com/kinoleaf/items/0b0002aa03993e58e2f0
■XAMPPで利用
※未検証
XAMPP にメールサーバ? それ MailHog でサクッとできるよ - てっきんの具。
https://www.tecking.org/archives/5717sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=localhost:1025"
# service httpd restart