ローカルで起動しているqmailがあって、そのサーバを使って外にメール送信しようとしているときに、特定の宛先のメールだけはそこへ送信させたくない!という状況が発生(具体的には開発機のデータが存在しないと思っていたのに、間違って実在するユーザに送信されないようにしたかった)したので、これをどうしようか?と考え、リレーサーバ?プロキシサーバを書くようにした。
具体的には、25番でsmtpdを立ち上げ、もとのqmailを別のポートで立ち上げ、
もともとの宛先を条件によって変更し(下記の例ではそもそも決め打ちにして)自サーバのqmailに対して送信するようにした。
こちらを参考にほぼ丸コピ。
http://www.doughellmann.com/PyMOTW/smtpd/
#-*- coding: utf-8 -*- import sys import smtpd import asyncore import smtplib import email.Utils from email.MIMEText import MIMEText class CustomSMTPServer(smtpd.SMTPServer): def process_message(self, peer, mailfrom, rcpttos, data): qmail_port = 10025 from_addr = mailfrom to_addr = 'xxxxx@example.com' msg = MIMEText(data) msg["To"] = email.Utils.formataddr((to_addr, to_addr)) msg["From"] = email.Utils.formataddr((from_addr, from_addr)) msg["Subject"] = 'test' # ローカルのメールサーバに投げる s = smtplib.SMTP('localhost', qmail_port) s.ehlo() s.ehlo() s.sendmail(from_addr, [to_addr], msg.as_string()) s.close() return server_port = 25 # 25番ポートで待ち受け server = CustomSMTPServer(('127.0.0.1', server_port), None) asyncore.loop()