勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PodmanでMailpit用コンテナを作成しPHPからテストメールを送受信する方法

  サーバー

開発中などでPHPからテストメールを送信したい。以前メモしたmailtrapを使うというのもありだが、今回はMailpitというテスト用SMTPサーバーのコンテナを作成し、PHP用コンテナと接続の上、テストメールを送受信するという方法を試してみたい。以下に対応方法をメモ。

 

Mailpit

公式サイト

https://mailpit.axllent.org/

 

環境について

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のチューニング(mpm_prefork)を行い ...

Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法

先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...

Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法
Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法

Podmanで導入したPHPの設定ファイル(php.ini)の内容を変更したい。 ...

Podmanで作成したコンテナの時刻設定とタイムゾーン設定について
Podmanで作成したコンテナの時刻設定とタイムゾーン設定について

Podmanで作成したコンテナの時刻設定とタイムゾーン設定はどうなるのか気になっ ...

PodmanにComposerを導入し、パッケージをインストールする方法
PodmanにComposerを導入し、パッケージをインストールする方法

先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...