DockerのPHPコンテナからメールを送信するためにsSMTPをインストールしてみた。

DockerのPHPコンテナからメールを送信しようと思ったら、エラーが出て送信できなかったので、メールの送信機能を追加しました。

PHPMailerを使用してSMTPで送信すれば良い話なのですが、気軽にPHPからmailコマンドで送信したかったのです。

今回のコンテナの仕様は、こんな感じです。

  • Alpine3.8
  • PHP7.2
  • nkf
  • PDOでMySQLに接続
  • s3にPHPから接続

このコンテナに、sSMTPを追加して、以下のようなDockerファイルに仕上げました。
※このコンテナはコマンドラインで使うものですので、php7-fpm や php7-opcache は入れていません。

FROM alpine:3.8
MAINTAINER Takashi Hashimoto <hashimoto@bagooon.com>

ENV NKF_VERSION 2.1.5

# Install packages
RUN apk --no-cache add \
	php7 \
	php7-mysqli \
	php7-pdo_mysql \
	php7-json \
	php7-zlib \
	php7-xml \
	php7-phar \
	php7-intl \
	php7-mbstring \
	php7-simplexml \
	ssmtp \
	composer \
    && echo 'sendmail_path = "/usr/sbin/ssmtp -t"' > /etc/php7/conf.d/mail.ini \
    && apk add --no-cache --virtual .build-deps \
        wget \
        make \
        gcc \
        g++ \
    && wget https://ja.osdn.net/dl/nkf/nkf-${NKF_VERSION}.tar.gz \
    && tar zxvf nkf-${NKF_VERSION}.tar.gz \
    && rm nkf-${NKF_VERSION}.tar.gz \
    && cd nkf-${NKF_VERSION} \
    && make \
    && make install \
    && cd .. \
    && rm -Rf nkf-${NKF_VERSION} \
    && apk del .build-deps

COPY config/php.ini /etc/php7/conf.d/zzz_custom.ini
COPY config/ssmtp.conf /etc/ssmtp/ssmtp.conf
COPY config/revaliases /etc/ssmtp/revaliases

# Add application
RUN mkdir -p /var/work
WORKDIR /var/work

CMD ["tail", "-f", "/dev/null"]

設定ファイルはこんな感じです。
※以下の3ファイルはconfigフォルダに入れます。

[ php.ini ]

[PHP]
post_max_size = 20M
upload_max_filesize = 20M
memory_limit = 128M

[Date]
date.timezone="Asia/Tokyo"

[Pdo_mysql]
pdo_mysql.cache_size = 2000

[ ssmtp.conf ]

root=postmaster
MailHub=smtp.xxxx.com:587
Hostname=xxxx.com
AuthUser=USERNAME
AuthPass=PASSWORD
UseSTARTTLS=YES

MailHub:STMPサーバーのホストネームとポートを指定
Hostname:このサーバのホストネームを指定
AuthUser:SMTPAuthのユーザー名
AuthPass:SMTPAuthのパスワード
SSLを使う場合は、UseSTARTTLS=YES または UseTLS=YES

ssmtp.conf のほかに、revaliasesという設定ファイルがあります。このファイルを設定すると、送信元のメールアドレスをユーザー毎に書き換えることが出来ます。

[ revaliases ]

root:hoge@fuga.jp

上記のように設定すると、rootユーザーから送信したメールの送信者は「hoge@fuga.jp」に置換されます。

ファイルを以下の位置に配置してbuildします。
Dockerfile
└ config
├ php.ini
├ ssmtp.conf
└ revaliases

PHPのmailコマンドで、サクッとメールを送信出来るようになりました。

mail('hashimoto@bagooon.com', 'test mail', 'yattane!');

シェアする

  • このエントリーをはてなブックマークに追加

フォローする