0
0

CodeIgniter3でMailpitを使ってlocalhost内でメール送信

Last updated at Posted at 2024-07-01

はじめに

少々レガシーかもしれませんがDocker/CodeIgniter3を使ってローカル環境で開発をしている際、「メール配信処理もMailpitを利用してローカル環境内で完結させたい」というケースに対するTIPSです。ドキュメントや参考事例が見当たらなかったので備忘録です。

Laravel

LaravelではMailpitが標準でサポートされており、まずDockerでイメージを指定してコンテナをデプロイします。

docker-compose.yml
    mailpit:
        image: axllent/mailpit:v1.8
        container_name: mailpit
        ports:
            - "8025:8025"
            - "1025:1025"
        environment:
            MP_DATA_FILE: /tmp/mailpit.db
        volumes:
            - /path/to/local/development_project/docker/mailpit/tmp:/tmp

次にLaravel側の.envファイルで以下のように指定するだけで簡単に導入できます。

.env
MAIL_HOST=mailpit

ローカル環境のサーバからメールを送信するとMailpit(標準では http://localhost:8025 にWebのUIが立ち上がる)にメールが届きます。なんと便利…。

CodeIgniter3

対してCoodeIgniter3ではキュメントやソースコード上ではMailpitに対応しているような記述はありませんでした。ですがメール送信を担当するEmailクラスのconfigを確認するとprotocolとして以下が選択できるようです。

mail、sendmail、または smtp

WebサーバにSendmail/PostfixなどMTAがインストールされていればエイリアスが効いてsendmailで問題ないと思いますが、別のサーバのSMTPを使いたい場合はsmtpを使うのが良さそうです。

smtp_hostでSMTPサーバを指定でます。マニュアルには「SMTP サーバのアドレス」とありますが、ここではDockerで指定したホスト名であるmailpitを、smtp_portはMailpitのsmtp inboundポートである1025番を指定します。

Emailクラス config
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'mailpit';
$config['smtp_port'] = '1025';

この設定でテストしていたのですが、CodeIngiter側でエラーが発生してしまいました。
EHLO〜MAIL FORM〜TOまではうまくいっているのですが、どうも本文データを受け渡す際にコケているようです。

CodeIgniter Emailクラス デバッグメッセージ
<pre>data: 354 Start mail input; end with <CR><LF>.<CR><LF></pre>

configの設定状況を確認するとcrlf newlineともにLF(\n)になっており、Mailpit側が要求するCRLF(\r\n)での区切りとマッチしないためと思われます。

Emailクラス config(修正)
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'mailpit';
$config['smtp_port'] = '1025';
+$config['crlf'] = "\r\n";
+$config['newline'] = "\r\n";

上記のように上書き設定を追記してテストしたところ無事にMailpitへメールは配送されました。これでローカル環境内でのメールテストが可能になります。地味に便利です…。

CodeIgniter4

Emailクラスのconfig周りを見る限り、若干項目のラベルが違いますが同じような設定で実現できるのではないかと思います。(未検証)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0