Docker PHPでMTA&SendGridでメール送信する

Docker開発関連

オフィシャルにあるPHP Apacheコンテナからメール送信を作った際のメモ。
メールといえばJava mailしか使ったことなく、MTAの設定は何気に初めてでした。通知なんかは全部Slackにしてしまっているし、、、

スポンサーリンク

Dockerファイルを作成

PHP ApacheのイメージはDebianベースのため、MSMTPをインストールします。
Dockerfileの例)

FROM php:7.4-apache

RUN apt-get update \
    && apt-get install -y libicu-dev autoconf make g++ gcc \
       msmtp \
       msmtp-mta \
    && apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* && rm -rf /root/.cpan

docker-composeを作成

無くてもいいのですが、compose派なので以下作成します。
docker-compose.ymlの例)

version: "3"
services:
  php:
    build:
      context: .
    container_name: php
    restart: always
    logging:
      options:
        max-size: 5m
    volumes:
      - ./html:/www/html
      - ./msmtprc:/etc/msmtprc:ro

msmtprcの設定ファイルを作成

SendGridを使ってローカルメールを転送できるように設定します。passwordとfromは環境に合わせて変更してください。

msmtprcの例)

account default
host smtp.sendgrid.net
port 2525
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck on
auth on
user apikey
password "SendGridのAPIキー"
from "hoge@test.shimer-system.com"
logfile /var/log/msmtp.log

動作確認

msmtpを使ってテストメールを送信する手順です。

# コンテナをビルドします
docker-compose build

# 起動
docker-compose up -d

# コンテナにbashログイン
docker exec -it php bash

# テストメールを送信
echo 'hello test mail' | msmtp -C /etc/msmtprc test@test.shimer-system.com

タイトルとURLをコピーしました