Docker テスト用メールサーバー

はじめに

ちょっと必要になってローカル開発やテスト用途にメールサーバーを立ててみました。
検索してみると「smtp4dev」とか「Radish」とか「BlackJumbo」とか出てきますが、
最近話題のコンテナdocker使ってみました。初めて←

環境

macOS 10.13.1
Docker version 17.09.0
Mailhog
https://hub.docker.com/r/mailhog/mailhog/

Dockerのインストール

一応公式ページでスペックを確認しておきます。
https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac
ハードは新しいモデルとmacOSはELCapitan10.11より新しい、
4GM以上のメモリ、VirtualBox4.3.30以前はやめとけと。

公式のホームページからdocker.dmgをダウンロードします。

f:id:skymay:20171126144626p:plain

クリックしてドラッグ&ドロップでinstallします。

Mailhogのインストール

続いてMailhogをcommandからインストールします。
公式サイトはこちら
https://hub.docker.com/r/mailhog/mailhog/

 $>docker pull mailhog/mailhog

設定と起動

docker-compose.ymlの設定をします。

$> mkdir docker
$> cd docker
$docker > vi docker-compose.yml

docker-compose.ymlの中身はこちら

mailhog:
  image: mailhog/mailhog
  ports:
    - "8025:8025"
    - "1025:1025"

8025はHTTPポート、1025はsmtpポートです。環境に合わせて変更してください。

mailhogを起動します

$> docker-compose up

起動後localhostへのアクセスを確認します。
http://localhost:8025/

メールテスト

動作テストします。pythonスクリプト書いてテストしました。
telnetでも良いと思います。

import smtplib
from email.mime.text import MIMEText
def test_mail(from_addr, to_addr, subject, msg):
    m = MIMEText(msg)
    m['Subject'] = subject
    m['From'] = from_addr
    m['To'] = to_addr

    s = smtplib.SMTP(host="localhost", port=1025)
    s.sendmail(from_addr, to_addr, m.as_string())
    s.close()
    return

test_mail("from@addr.example.com","to@addr.example.com","test","test")

f:id:skymay:20171126150514p:plain

docs.docker.com