背景(と愚痴)
WP Mail SMTPプラグインをインストールしているのに、独自にメール送信プログラム作られていた。。。
しかもメールフォームに蜜結合しているし、mail関数でJISエンコード。。。
どこからかコピってきたものを継ぎ接ぎしてカスタマイズしているっぽい。そしてコメントがほぼなく難読。。。
そんなメールフォームに入力項目を早急に増やしてほしいという改修リクエスト来たけど、
Docker環境にSMTP機能が実装されていない。
そこで、Docker-composeでSMTP機能とメールテスト機能を実装する。
実装
SMTPクライアントとしてmsmtp、
SMTPテストサーバーとしてMailCatcherを実装した。
-
wordpressのDockerイメージにmsmtpをインストールするようにDockerfileを作成する。
./docker/wordpress.DockerfileFROM wordpress:latest # msmtpをインストール RUN apt-get -y update && apt-get install msmtp -yqq # phpでmsmtpを使い、MailCatcherに送信するための設定 RUN echo 'sendmail_path = /usr/bin/msmtp -a mailcatcher -t' >> /usr/local/etc/php/conf.d/msmtp.ini
-
msmtp用の設定ファイルを用意する。
./msmtprc# Set default values for all following accounts. defaults auth off tls off tls_trust_file /etc/ssl/certs/ca-certificates.crt syslog on aliases /etc/aliases # MailCatcher account mailcatcher host mailcatcher port 1025 from username@example.com user username password password # Set a default account account default : mailcatcher
-
Docker-composeのWP用テンプレート を下記のように変更する。
./docker-compose.ymlversion: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db #image: wordpress:latest # 上1行を削除し、下記3行を挿入 build: context: ./docker dockerfile: wordpress.Dockerfile ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress # 下記2行を挿入 volumes: - ./msmtprc:/etc/msmtprc # 下記5行を挿入 mailcatcher: image: schickling/mailcatcher ports: - 1080:1080 - 1025:1025 volumes: db_data:
試してダメだったこと。
-
MailHogを使ってみた。しかし、日本語メールが文字化けした。
MailHogはJISエンコードには対応していないらしい。 -
ssmtpのインストール試行。しかし、そんなプログラムはもう存在しないと怒られた。
msmtpが後継らしい。