我想创建一个SMTP网关,用于过滤电子邮件并将其重定向到远程SMTP服务器。
from smtpd import SMTPServer
from email.parser import Parser
class SMTPGateway(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print('Processing message...')
email = Parser().parsestr(data)
for part in email.walk():
if part.get_content_maintype() == 'text':
text = part.get_payload()
# Process text
# forward email to upstream smtp server
使用此代码,我可以收到一条消息并进行处理。但我不知道如何将消息转发到远程服务器。
在我的主程序中,我创建了这样的服务器:
localaddress = ('localhost', 3000)
remoteaddress = ('localhost', 9000)
gateway = SMTPGateway(localaddress, remoteaddress)
如何将process_message
中的邮件重定向到远程服务器?
SMTP-Server的文档非常简短: https://docs.python.org/2/library/smtpd.html。 我在那里找不到答案。
答案 0 :(得分:1)
我自己找到了答案。
from smtpd import SMTPServer
from email.parser import Parser
class SMTPGateway(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print('Processing message...')
email = Parser().parsestr(data)
for part in email.walk():
if part.get_content_maintype() == 'text':
text = part.get_payload()
# Process text
# forward email to upstream smtp server
ip = self._remoteaddr[0]
port = self._remoteaddr[1]
server = SMTP(ip, port)
server.send_message(email)
server.quit()