はじめに
開発プロジェクトでメール送信機能が必要な場合、メールサービスが提供するAPIを利用することが多いため、ポート25や587を直接意識する機会は少ないかもしれません。
しかし、以下のようなケースではSMTPサーバーに直接アクセスしたいというニーズも依然として存在します。
- SMTPサーバーに直接アクセスしたい
- 外部のSMTPサービスを使いたくない
- 送信テストができればよく、実際にメールをリレーする必要はない
当記事では、OpenShiftを利用している方がこれらのニーズに合わせてSMTPサーバーを立ち上げる方法を紹介します。
今回の構成
ベースとなるSMTPサーバーには、活発に更新が行われているMailpitを使用します。OpenShift上には、以下のような構成でオブジェクトを配置します。

インストール
インストールしたいプロジェクトで「YAMLのインポート」を選択し、以下のYAMLを実行します。これだけで必要なオブジェクトが作成されます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mailpit
labels:
app: mailpit
spec:
replicas: 1
selector:
matchLabels:
app: mailpit
template:
metadata:
labels:
app: mailpit
spec:
containers:
- name: mailpit
image: axllent/mailpit
ports:
- name: smtp-mailpit
containerPort: 1025
- name: web-mailpit
containerPort: 8025
---
apiVersion: v1
kind: Service
metadata:
name: mailpit-smtp
spec:
type: NodePort
selector:
app: mailpit
ports:
- name: smtp-mailpit-svc
protocol: TCP
port: 1025
targetPort: smtp-mailpit
nodePort: 31025
---
apiVersion: v1
kind: Service
metadata:
name: mailpit-web
spec:
selector:
app: mailpit
ports:
- name: web-mailpit-svc
protocol: TCP
port: 8025
targetPort: web-mailpit
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: mailpit-web
spec:
to:
kind: Service
name: mailpit-web
port:
targetPort: web-mailpit-svc
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
このYAMLを実行することで、以下のオブジェクトが作成されます。
タイプ | 名前 |
---|---|
Deployment | mailpit |
Service | mailpit-smtp |
Service | mailpit-web |
Route | mailpit-web |
ここまでで、Mailpitのサービスが起動します。管理用のWeb画面は、Routeで定義されたURLからアクセスできます。
Web画面では、以下のようにメールの受信状況を確認できます。
OpenShift外部からメール送信できるようにする
RouteはHTTP/HTTPS接続に対応しているため、SMTP接続には別の方法が必要です。このようなケースでは、ServiceをNodePortまたはLoadBalancerタイプで起動するのが一般的とされています。
ただし、OpenShift Localでは上記の手順だけでは動作しない課題があるため、ポートフォワードを使ってサービスのポートをホストネットワークに公開します。
oc port-forward --address 0.0.0.0 service/mailpit-smtp 1025:1025
環境によっては、ファイアウォールによるブロックが発生する場合があります。その際は、運用ルールに合わせて適切に対応してください。
送信サーバー設定
今回の設定をもとにした、送信側のサーバー接続設定は次のようになります。当記事作成にあたっては、OpenShift Local外部の接続を使って検証しています。
接続元 | 接続設定 |
---|---|
OpenShiftの別サービス | (mailpit-smtpサービスのServiceルーティングホスト名):1025 |
OpenShift外部 | (NodeのExternalアドレス):31025 |
OpenShift Local外部 | (OpenShift LocalのホストIPアドレス):1025 |
アンインストール
作成されたオブジェクトを全て削除してください。
おわりに
コンテナ環境を利用すると、さまざまなサービスを迅速に起動できるメリットがあります。SaaSやクラウドサービスなどと使い分けながら、効果的に活用していきたいですね。