この記事は...
体育会系エンジニア Advent Calendar 2017 10 日目の記事になる予定です. 駅伝部出身です. うっす.
そして...
参加者の少ない, 初老丸 Advent Calendar 2017 10 日目の記事になる予定です.
tl;dr
MacOS X 上でメール送信の動作確認をする際に mailcatcher という gem が擬似的にメールを受信してくれて, その受信結果をブラウザで確認出来たりして便利だったのでメモっておく.
↑ こんな感じでブラウザで送信結果を確認出来たりする.
mailcatcher の準備
mailcatcher とは
- Ruby で実装されている
- シンプルな SMTP サーバー(デフォルトで 1025 番で Listen する)
- 1025 番宛にメールを送りつければ, 全てのメールをキャッチしてブラウザで確認することが出来る
- 1080 番で Web メーラーのような UI が提供されていて, 添付ファイルの表示等も出来るらしい
Docker イメージで展開する
README では gem install
するように書かれているが, Docker イメージが提供されていたので Docker イメージを利用する.
docker run \ --detach \ --name mailcatcher \ -p 1025:1025 \ -p 1080:1080 \ schickling/mailcatcher
これだけ, 簡単ですな.
ブラウザで http://localhost:1080 にアクセスすると, 上図のようなページが表示される.
メールを送るサンプル
スクリプト本体
以下のような Python スクリプトを用意.(なかなか上達しない Python 道)
#!/usr/bin/env python import argparse import toml import smtplib from email.mime.text import MIMEText def read_config(config_file): ''' Description: 設定ファイルの読み込み ''' with open(config_file) as conffile: c = toml.loads(conffile.read()) config = {} # [common] Stage config['stage'] = c['common']['stage'] # [notify] E-Mail Address & Subject Prefix config['smtp'] = c['mail']['smtp'] config['email_address'] = c['mail']['email_address'] config['subject_prefix'] = c['mail']['subject_prefix'] return config def send_mail(config, message): ''' Description: メール送信する Return: None ''' from_address = config['email_address'] to_address = config['email_address'] msg = MIMEText(message) msg['Subject'] = config['stage'] + config['subject_prefix'] msg['From'] = config['email_address'] msg['To'] = config['email_address'] s = smtplib.SMTP(config['smtp']) s.sendmail(from_address, [to_address], msg.as_string()) s.close() print(message) def main(): p = argparse.ArgumentParser() p.add_argument('--config-file', default='config.toml') args = p.parse_args() config = read_config(args.config_file) message = 'Hello World.' send_mail(config, message) if __name__ == '__main__': main()
smtplib というライブラリを使えば, 簡単にメール送信を実装出来る. しかも, このライブラリは標準ライブラリなので嬉しい限り.
設定ファイル
設定ファイルは TOML フォーマットで.
[common] stage = "debug" [mail] smtp = "127.0.0.1:1025" email_address = "foo@example.com" subject_prefix = " MailCatcher Test."
この設定ファイルを debug.toml という名前で保存しておく.
実行サンプル
以下のように, 設定ファイルを指定してスクリプトを実行する.
$ python --version Python 3.6.2 $ python mail-debug.py --config-file=debug.toml Hello World.
mailcatcher で確認
改めて, サンプルスクリプトを叩いてみる.
$ python mail-debug.py --config-file=debug.toml
Hello World.
うむ, LGTM(言ってみたかっただけ...)
mailcatcher を見てみると...
LGTM(言ってみたかっただけ...) ちゃんとメールがキャッチ出来ている.
以上
メモでした.
これまでは, 自分のメールアドレス宛に送っていたりして体育会系デバッグ作業だったけど, mailcatcher を使うことでデバッグ作業は 256 倍捗りそうな気がする. うっす.