LoginSignup
2
1

More than 1 year has passed since last update.

WordPressのDocker環境で、JISエンコードのメール送信に対応する

Last updated at Posted at 2021-07-05

背景(と愚痴)

WP Mail SMTPプラグインをインストールしているのに、独自にメール送信プログラム作られていた。。。
しかもメールフォームに蜜結合しているし、mail関数でJISエンコード。。。
どこからかコピってきたものを継ぎ接ぎしてカスタマイズしているっぽい。そしてコメントがほぼなく難読。。。

そんなメールフォームに入力項目を早急に増やしてほしいという改修リクエスト来たけど、
Docker環境にSMTP機能が実装されていない。

そこで、Docker-composeでSMTP機能とメールテスト機能を実装する。

実装

SMTPクライアントとしてmsmtp、
SMTPテストサーバーとしてMailCatcherを実装した。

  1. wordpressのDockerイメージにmsmtpをインストールするようにDockerfileを作成する。

    ./docker/wordpress.Dockerfile
    FROM 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
    
  2. 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
    
  3. Docker-composeのWP用テンプレート を下記のように変更する。

    ./docker-compose.yml
    version: '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が後継らしい。

参考

2
1
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
2
1