Python の smtpd.DebuggingServer でメール送信をデバッグ

  • 12
    Like
  • 0
    Comment
More than 1 year has passed since last update.

メール送信を行うシステムを開発している場合、作業中のネットワーク環境により、利用しているプロバイダの Outbound Port 25 Blocking の制限で25番ポート経由のメール送信がブロックされることがあります。

プロバイダ指定の SMTP サーバを経由して送信すればよいのですが、開発用のメール送信設定に SMTP ユーザ情報を含めなければならず面倒です。

開発時は、実際に送信されなくてもメールの送信内容が確認できればよかったため、デバッグ用の SMTP サーバを探していたところ、Python に smptd.DebuggingServer という標準ライブラリがありました。

以下のワンライナーで、ダミーの SMTP サーバを起動できます。

$ python -m smtpd -n -c DebuggingServer localhost:1025

smtpd モジュールのソースを見てみると SMTPServer#process_message を実装しているだけでしたので、必要に応じて調整したデバッグサーバを作っておくと良いと思います。

http://hg.python.org/cpython/file/2.7/Lib/smtpd.py#l330:

class DebuggingServer(SMTPServer):
    # Do something with the gathered message
    def process_message(self, peer, mailfrom, rcpttos, data):
        ...
        print '---------- MESSAGE FOLLOWS ----------'
        for line in lines:
           ...
        print '------------ END MESSAGE ------------'

dsmtpd というライブラリもすでにありました。