1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

背景(と愚痴)

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が後継らしい。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?