我想收到一封python的电子邮件。然后,我想退出邮件服务器,并在脚本中使用电子邮件的内容。
例如:
if "any_string" in data:
print "success"
<< exit mailserver >>
<< any other commands >>
代码:import smtpd
import asyncore
class FakeSMTPServer(smtpd.SMTPServer):
__version__ = 'TEST EMAIL SERVER'
def process_message(self, peer, mailfrom, rcpttos, data):
print 'Receiving message from:', peer
print 'Message addressed from:', mailfrom
print 'Message addressed to :', rcpttos
print 'Message length :', len(data)
print 'Message :', data
return
if __name__ == "__main__":
smtp_server = FakeSMTPServer(('0.0.0.0', 25), None)
try:
asyncore.loop()
except KeyboardInterrupt:
smtp_server.close()
可以使用SMTP.quit()关闭SMTP会话。在你的情况下,你可以使用smtp_server.quit()
关于在字符串中搜索单词,您可以这样做
data = 'my Test data'
for word in data.split():
if 'test' in word:
print "success"
如果您想忽略大小写(大写/小写),那么只需使用lower()将字符串转换为小写,然后检查如下所示:
data = 'my Test data'
for word in data.lower().split():
if 'test' in word:
print "success"
如果你想在使用asyncore.loop()
时停止脚本,那么你可能需要使用一个不同的线程来启动SMTP服务器,然后你可以控制它。这个问题解释了细节。如何在python类中处理asyncore,而不阻塞任何东西?
您可以通过在process_message
方法中调用asyncore.close_all
来退出asyncore
循环:
def process_message(self, peer, mailfrom, rcpttos, data):
# ...
print 'Message :', data
asyncore.close_all()
return
编辑如果您想在退出asyncore
循环后访问邮件的文本,只需将其存储为smtp服务器的属性
#...
class FakeSMTPServer(smtpd.SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data):
# ...
self.data = data
# ...
if __name__ == "__main__":
smtp_server = FakeSMTPServer(('0.0.0.0', 25), None)
try:
asyncore.loop()
except KeyboardInterrupt:
smtp_server.close()
# smtp_server.data contains text of message