「Webアプリでメール機能を確認したいけど、開発で使うだけだからローカルで手軽に構築したい」
本番環境で利用する場合はMTA(Mail Transfer Agent)、MDA(Mail Delivery Agent)を用意し、ISP側にリレーサーバを用意しなければいけません。
OSSでそろえるならMTAにPostfix、MDAをDovecotあたりを使うと思うけど、開発で確認したいだけなのに構築するのは面倒くさいです。
なので Mailpit を利用して構築してみることにしました。
ちなみに前身となるメールサーバのMailHogがありますが、性能面に問題があるようです。
環境
名前 | バージョン |
---|---|
CentOS-Stream-9 | |
kubelet | v1.26.2 |
kubeadm | v1.26.2 |
containerd | v1.6.16 |
calico | v3.25 |
metallb | v0.13.9 |
mailpit | v1.9.3 |
構築
WebUIで接続するポートが「8025」、SMTP用のポートが「1025」になります。
開発用なので永続ストレージはつけません。
デプロイ
mailpit.yaml でマニフェストを作成。
apiVersion: v1
kind: Service
metadata:
name: mailpit
labels:
app: mailpit
spec:
ports:
- name: host
port: 8025
protocol: TCP
targetPort: 8025
- name: smtp
port: 1025
protocol: TCP
targetPort: 1025
selector:
app: mailpit
tier: frontend
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mailpit
labels:
app: mailpit
spec:
selector:
matchLabels:
app: mailpit
tier: frontend
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: mailpit
tier: frontend
spec:
containers:
- image: axllent/mailpit:latest
name: mailpit
ports:
- name: host
containerPort: 8025
- name: smtp
containerPort: 1025
applyでポッド作成
kubectl apply -f mailpit.yaml
動作確認
kubernetes確認
kubectl get pod,svc コマンドでポッドの動作状況を確認します。
NAME READY STATUS RESTARTS AGE
pod/mailpit-9b6cb678f-6gkwm 1/1 Running 0 21m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mailpit LoadBalancer 10.103.86.110 172.16.200.2 8025:32617/TCP,1025:31371/TCP 5s
メールの送受信確認
ブラウザで接続確認をします。
http://[IPアドレス]:8025
Windowsのtelnetクライアントでテストしてみます。(telnetを事前に有効化して下さい)
コマンドプロンプトでtelnetクライアントを起動します。
D:\> telnet
コマンドでメールを作成し送信します。
Microsoft Telnet> open [ExternalIP] 1025 ←mailpitサーバのポート1025に接続
220 mailpit-9b6cb678f-6gkwm Mailpit ESMTP Service ready
helo test ←適当なドメインを指定
250 mailpit-9b6cb678f-6gkwm greets test
mail from:<test> ←送信元(ドメインなし)
250 2.1.0 Ok
rcpt to:<test> ←宛先(ドメインなし)
250 2.1.5 Ok
data
354 Start mail input; end with <CR><LF>.<CR><LF>
Subject: test mail
test mail.
.
250 2.0.0 Ok: queued
ブラウザから受信できていることが確認できました。
永続化、アカウント作成について
下記オプションがありますので、データベース、パスワードファイルを指定することもできます。(mailpit wiki)
pv,pvcを設定し、Configmapでオプションを設定すれば永続化することができます。
■メール情報の永続化
MP_DATA_FILE=/data/mailpit.db
■ユーザ名、パスワード設定
MP_UI_AUTH_FILE=/data/authfile