PodmanでMailpit用コンテナを作成しPHPからテストメールを送受信する方法
開発中などでPHPからテストメールを送信したい。以前メモしたmailtrapを使うというのもありだが、今回はMailpitというテスト用SMTPサーバーのコンテナを作成し、PHP用コンテナと接続の上、テストメールを送受信するという方法を試してみたい。以下に対応方法をメモ。
Mailpit
公式サイト
環境について
VPS
今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。
- 接続ポート -> 22
- ユーザ名 -> root
- パスワード or 秘密鍵 -> インスタンス作成時に選択したもの
ホスト(VPS)側
- AlmaLinux 8.10 (Cerulean Leopard)
コンテナ側
- podman version 4.9.4-rhel
- PHP 8.4.24(cli)
対応方法
ネットワークの作成
以下でネットワークを作成し、先にPHP用コンテナを接続しておく。その他ネットワーク設定については過去記事参照。
# ネットワークの作成 podman network create web-mailpit-net # PHP用コンテナ(web-container)をネットワークに接続 podman network connect web-mailpit-net web-container
docker-compose.yml
services:
mail:
container_name: mailpit-container
image: axllent/mailpit:latest
ports:
- "19925:1025"
- "19980:8025"
volumes:
- .:/data
- ./.htpasswd:/data/.htpasswd
environment:
TZ: Asia/Tokyo
MP_MAX_MESSAGES: 1000
MP_DATABASE: /data/mailpit.db
# どのようなユーザー・パスワードでも認証を通す
MP_SMTP_AUTH_ACCEPT_ANY: 1
# 暗号化されていない接続でのSMTP認証を許可
MP_SMTP_AUTH_ALLOW_INSECURE: 1
MP_UI_AUTH_FILE: /data/.htpasswd
deploy:
resources:
limits:
memory: 32M
networks:
- web-mailpit-net
networks:
web-mailpit-net:
external: true
.htpasswd
Basic認証用のファイルをhtpasswd生成ツール等で作成し「.htpasswd」というファイル名で「docker-compose.yml」と同じディレクトリにアップロードする。
mailpit_test.php
composerが入っていない場合は過去記事を参照。
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require '../vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host = 'mailpit-container';
$mail->Port = 1025;
$mail->SMTPAuth = false;
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->setFrom('from@test.com', 'PHP App');
$mail->addAddress('to@test.com', 'Mail User');
$mail->Subject = 'Mailpitのテスト送信';
$mail->Body = 'Mailpitコンテナからテスト送信';
$mail->send();
echo "\n送信成功\n";
} catch (Exception $e) {
echo "\n送信失敗: {$mail->ErrorInfo}\n";
}
Mailpit用コンテナの作成・起動
以下でMailpit用コンテナの作成と起動まで進める。
# 各ファイルを設置したディレクトリに移動 cd /path/to # コンテナ起動 podman compose up -d
正常に起動できた場合、ブラウザからmailpit_test.phpにアクセスすると送信ログと「送信成功」の文言が表示される筈。
また、「IPアドレス:19980」にアクセスするとBasic認証が入り、その後以下ダッシュボードが表示され受信メールが確認できる筈。
関連記事
-
-
Podmanで導入したApacheのチューニング(mpm_prefork)に関する設定方法
Podmanで導入したApacheのチューニング(mpm_prefork)を行い ...
-
-
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...
-
-
Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法
Podmanで導入したPHPの設定ファイル(php.ini)の内容を変更したい。 ...
-
-
Podmanで作成したコンテナの時刻設定とタイムゾーン設定について
Podmanで作成したコンテナの時刻設定とタイムゾーン設定はどうなるのか気になっ ...
-
-
PodmanにComposerを導入し、パッケージをインストールする方法
先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...
