PHP+msmtpとMailCatcherをDockerで動かす
PHP+msmtpとMailCatcherをDockerで動かす
今までPHP+ssmtpとMailCatcherを使用していた。
WSL2にしてDockerを動かそうとしたら
Package 'ssmtp' has no installation candidate
と出てインストールできなかった。
ssmtpはメンテされていないことを知ったので代わりにssmtpからmsmtpを使用することにした。
PHP + msmtpコンテナからメールを送信してMailCatcherコンテナで受信するイメージ。
MailCatcherを立ち上げる
参考 qiita.com
msmtp
PHPのコンテナのDockerfileに以下を追加。
RUN apt-get install msmtp msmtp-mta -yqq
msmtp設定ファイルの場所
root@819b134ed4c4:/# msmtp --version msmtp version 1.8.3 Platform: x86_64-pc-linux-gnu TLS/SSL library: GnuTLS Authentication library: GNU SASL Supported authentication methods: plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm IDN support: enabled NLS: enabled, LOCALEDIR is /usr/share/locale Keyring support: none System configuration file name: /etc/msmtprc User configuration file name: /root/.msmtprc Copyright (C) 2019 Martin Lambers and others. This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law.
システムの設定ファイルは /etc/msmtprc
ユーザ個別の設定ファイルは /root/.msmtprc
- 設定ファイルをコンテナにマウントする
volumes: - ./msmtprc:/etc/msmtprc
- msmtprcの設定
/etc/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 # MailCatcherのコンテナ名 host mailcatcher port 1025 from username@example.com user username password password # Set a default account account default : mailcatcher
auth と tls をoffにしないと以下のエラーが出て送信できない。
msmtp: the server does not support TLS via the STARTTLS command msmtp: could not send mail (account default from /etc/msmtprc) msmtp: the server does not support authentication msmtp: could not send mail (account default from /etc/msmtprc)
送信
$ echo "Hello this is sending email using msmtp" | msmtp recipent@domain.com
php.iniの設定
[mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path ;sendmail_path = /usr/sbin/sendmail -t -i sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"
PHPから送信
<?php mail("your@email.com", "Test email from PHP", "msmtp as sendmail for PHP"); ?>