Dockerでのメール送信に送信専用MTA「sSMTP」を使用していましたがBuildすると
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」を使用してメール送信します。
目次
ディレクトリ構成
[プロジェクト] ┠ html ┃ ┗ text-mail.html ┠ mysql (起動時に自動生成されます ┠ docker-compose.yml ┠ Dockerfile ┠ msmtprc ┗ php.ini
docker-compose.yml
Dockerのコンテナ定義ファイルdocker-compose.ymlを作ります。
MySQLとWordPressそしてphpmyadminで構成します。
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を作ります。
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に変更を加えます。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[Mail]
sendmail_path = "/usr/sbin/sendmail -t"
※msmtp-mtaをインストールしない場合は以下に変更すればできると思われる。
[Mail]
sendmail_path = "/usr/bin/msmtp -t"
メール送信テストファイルも用意しておきます
html/test-mail.txt
To:xxxxxxxx@gmail.com
From:xxxxxxxx@gmail.com
Subject: Test
This is a test mail.
msmtprc
MSMTPの設定ファイルmsmtprcも読み込ませます。
# 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にしておくと
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 としました。
起動
PS C:\lamp\wp> docker-compose up -d --build
※初回はbuildオプションをつけて。
次回からは
PS C:\lamp\wp> docker-compose up -d
※php.iniやmsmtprcなど外部から読み込ませるファイルを変更した場合はbuildが必要です。
メール送信テスト
wpコンテナに入ってsendmailを実行します。
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の全コンテナ停止します。
PS C:\lamp\wp> docker-compose down