
PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
2021-05-195 min read
目次
概要
Postfixのリレーを介して送信されたメールをMailHog(開発用SMTPサーバ)でキャッチするDocker開発環境を構築した際のメモです。
環境
- Docker
- CentOS:8.3
Dockerイメージ作成
Dockerイメージ作成に必要なファイルの用意を行います。
リポジトリの構成はこのようにします。
├── app
│ ├── Dockerfile
│ └── conf
│ ├── entrypoint.sh
│ └── main.cf
└── docker-compose.yml
app/Dockerfile
FROM centos:8.3.2011
RUN dnf -y install postfix
# おまけ: 送信テストのためにphpとtelnetをインストール
RUN dnf -y install telnet php php-mbstring
COPY conf/entrypoint.sh /entrypoint.sh
COPY conf/main.cf /etc/postfix/main.cf
RUN chmod 700 /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
CMD ["/sbin/init"]
conf/main.cf
# relayhost = [host.docker.internal]:1025
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
mydomain = example.com
myorigin = $mydomain
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_security_level = may
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
conf/entrypoint.sh
#!/bin/bash
set -e
# リレーホストの設定
echo "relayhost = $MAIL_SERVICE" >> /etc/postfix/main.cf
# Postfixを起動
/usr/sbin/postfix -c /etc/postfix start
exec "$@"
docker-compose.yml
version: '3'
services:
app:
container_name: "app"
build: ./app
tty: true
environment:
- MAIL_SERVICE=[mail]:1025
networks:
- my-network1
mail:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
- "1025:1025"
networks:
- my-network1
networks:
my-network1:
この設定でアプリケーションを動かすコンテナと開発用のメール受信コンテナ(MailHog)を作成できました。
コンテナの起動
次のコマンドでコンテナを起動します。
docker-compose up -d --build
MailHogは http://localhost:8025 からアクセスできます。
コンテナにシェルで入ります。
docker exec -it app bash
telnetで送信テスト
telnetでローカルホストのSMTPサーバに繋ぎに行きます。
telnet localhost 25
次のようにメッセージを入れることでメール送信を確認することができます。
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 90f3e3d03e27.example.com ESMTP Postfix
HELO foo@example.com
250 90f3e3d03e27.example.com
MAIL FROM: <foo@example.com>
250 2.1.0 Ok
RCPT TO: <bar@example.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test
Hello World!
.
250 2.0.0 Ok: queued as B6DD13210E4
quit
221 2.0.0 Bye
Connection closed by foreign host.
phpで送信テスト
次のようにPHPファイルを作成し実行することでメールの送信を確認することができると思います。
<?php
$to = "to@example.com";
$subject = "TEST";
$message = "Hello World!";
$headers = "From: from@example.com";
mb_send_mail($to, $subject, $message, $headers);
Recommends
PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
2021-05-19
CentOS6(Docker)でyum update できなくなった
2021-05-20
php-fpmのステータスページを表示 Apache & htaccess
2021-03-24
PHP-FPM(php7.4) Apache2.4 でWebサーバ構築 on CentOS...
2021-01-17
CentOS8 に PHP7.4 インストール
2021-01-17
dockerでオリジナルのイメージを作成 外部出力まで
2019-06-09
AutotoolsでconfigureやMakefileの作成
2022-01-10
RPMパッケージ作成 Dockerを利用して
2022-01-10
CentOS8/RHEL8でのRPM管理における検討事項
2021-12-01
RPMのspecファイルで利用するマクロ・変数
2022-01-09
Node.js で作成した REST API を Docker化
2021-08-08
AWS Amplify で コンテナベースのデプロイを行い REST API を構築
2021-07-26
CentOS8 に Python + OpenCV をインストール
2021-06-05
GitLab.com のコンテナレジストリで1つのプロジェクトに複数のDockerイメージ...
2021-05-18
CentOS8 に Oracle12.2 clientをインストールする
2021-03-07
New Posts
[AWS CDK]ECS FargateでNestJSで作成したRESTfull APIデ...
2022-05-24
[AWS CDK]S3 CloudFront OAI Route53 構成 で NextJ...
2022-05-23
[CDK]SNS+SQS+DynamoDBでBounceとComplaint情報を収集する...
2022-04-11
[AmazonSES] node.js と ejs を利用してEメールを送信する
2022-04-09
GatsbyからNext.jsへのサイト移行
2022-04-04
[AWS CDK] Lambda で S3 オブジェクトを読み書きするStackの構築
2022-03-18
[AWS CDK] S3 + CloudFrontの構築とOriginAccessIden...
2022-03-09
[AWS CDK] Bastion(踏み台)構築。SSMとEC2InstanceConne...
2022-03-06
[AWS CDK] Cognito を構築
2022-03-04
AWS CDK v2 でVPC上にAPI Gateway + Lambda + RDS +...
2022-02-28
javascriptで累積和を解く
2022-02-27
AWS Amplify で monorepo を導入し 単一リポジトリで複数プロジェクトを...
2022-02-25
AWS CDK v2 で Lambda関数のデプロイ
2022-02-23
NextJSでDevToysのようなものを作成した
2022-02-22
JSで動的計画法を利用して部分和問題を解く
2022-02-20
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
OpenCVのMatのタイプ一覧表
2018-11-25
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
Macでターミナルからポートスキャンを行う方法。
2018-12-09
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
Date
▶︎
2022 年 (23)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
Author