Dockerでのメール送信に送信専用MTA「sSMTP」を使用していましたがBuildすると
1 2 3 |
Package ssmtp is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source |
と使用できなくなったので代わりに「MSMTP」を使用してメール送信します。
ディレクトリ構成
1 2 3 4 5 6 7 8 |
[プロジェクト] ┠ html ┃ ┗ text-mail.html ┠ mysql (起動時に自動生成されます ┠ docker-compose.yml ┠ Dockerfile ┠ msmtprc ┗ php.ini |
docker-compose.yml
Dockerのコンテナ定義ファイルdocker-compose.ymlを作ります。
MySQLとWordPressそしてphpmyadminで構成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
version: '3' services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: pass volumes: - ./mysql:/var/lib/mysql wp: build: . environment: WORDPRESS_DB_PASSWORD: pass WORDPRESS_DB_USER: root WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_NAME: wp ports: - "80:80" links: - mysql volumes: - ./html:/var/www/html phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=pass links: - mysql ports: - '8080:80' volumes: - /sessions |
WordPressコンテナwpはカスタマイズしてbuildするとしてカレントディレクトリにDockerfileを置くので「build: .」とします。
Dockerfile
WordPressコンテナwpをカスタマイズするためDockerfileを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
FROM wordpress RUN apt-get update # MSMTPとvimをインストール RUN apt-get install -y msmtp msmtp-mta vim # MSMTPの設定ファイルを読ませる COPY ./msmtprc /etc/msmtprc # パーミッション設定 RUN chown www-data:www-data /etc/msmtprc RUN chmod 600 /etc/msmtprc # php.iniを読み込ませる COPY ./php.ini /usr/local/etc/php |
※msmtpの実行パスは/usr/bin/msmtpだがmsmtp-mtaをインストールすることでsendmailのエイリアスが作成され実行パスをsendmailに合わせてくれるらしい。
※パーミッション設定でオーナーをapache実行ユーザのwww-dataにしないとブラウザからのメール送信ができません。
php.ini
コンテナ標準のphp.iniに変更を加えます。
1 2 3 4 5 6 7 8 9 |
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese" [Mail] sendmail_path = "/usr/sbin/sendmail -t" |
※msmtp-mtaをインストールしない場合は以下に変更すればできると思われる。
1 2 |
[Mail] sendmail_path = "/usr/bin/msmtp -t" |
メール送信テストファイルも用意しておきます
html/test-mail.txt
1 2 3 4 5 |
To:xxxxxxxx@gmail.com From:xxxxxxxx@gmail.com Subject: Test This is a test mail. |
msmtprc
MSMTPの設定ファイルmsmtprcも読み込ませます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Set default values for all following accounts. defaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt tls_certcheck off # TLS no check※ aliases /etc/aliases logfile /var/log/msmtp.log # Gmail account gmail host smtp.gmail.com port 587 from xxxxxxxx@gmail.com user xxxxxxxx@gmail.com password xxxxxxxx # set a default account account default : gmail |
※TLS認証チェックをONにしておくと
1 2 |
sendmail: TLS certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown. sendmail: could not send mail (account default from /etc/msmtprc) |
となり信用できないと怒られたので tls_certcheck off としました。
起動
1 |
PS C:\lamp\wp> docker-compose up -d --build |
※初回はbuildオプションをつけて。
次回からは
1 |
PS C:\lamp\wp> docker-compose up -d |
※php.iniやmsmtprcなど外部から読み込ませるファイルを変更した場合はbuildが必要です。
メール送信テスト
wpコンテナに入ってsendmailを実行します。
1 2 |
PS C:\lamp\wp> docker-compose exec wp bash root@e374d1e82b46:/var/www/html# /usr/sbin/sendmail -t < test-mail.txt |
※msmtp-mtaをインストールしない場合は「/usr/sbin/sendmail」を「/usr/bin/msmtp」に変更すれば送信できると思われる。
WordPressインストール
http://localhost にアクセスしてWordPressをインストールしましょう。
終了
Dockerの全コンテナ停止します。
1 |
PS C:\lamp\wp> docker-compose down |