将电子邮件输入python/flask应用程序代码的第一步是什么?
我正在研究如何制作一个可以直接与电子邮件交互的web应用程序。就像你寄给我的一样something@myapp.com应用程序会把它拆开,确定它来自谁,如果他们在数据库中,主题行是什么,等等 我正在使用/最熟悉python和flask将电子邮件输入python/flask应用程序代码的第一步是什么?,python,flask,email,Python,Flask,Email,我正在研究如何制作一个可以直接与电子邮件交互的web应用程序。就像你寄给我的一样something@myapp.com应用程序会把它拆开,确定它来自谁,如果他们在数据库中,主题行是什么,等等 我正在使用/最熟悉python和flask 有人能告诉我如何让电子邮件与我的flask应用程序代码交互的正确方向吗?您可以采取以下几种方法: 编写一些代码,使用IMAP或POP来检索和处理电子邮件。可以从crontab(或类似的东西)运行它,也可以将它添加到您的flask应用程序中,并在其中触发它,或者通
有人能告诉我如何让电子邮件与我的flask应用程序代码交互的正确方向吗?您可以采取以下几种方法:
- 编写一些代码,使用IMAP或POP来检索和处理电子邮件。可以从crontab(或类似的东西)运行它,也可以将它添加到您的flask应用程序中,并在其中触发它,或者通过请求神奇URL的crontab,或者设置自定义计时器线程
- 配置您的MTA以为发送电子邮件something@myapp.com通过将其馈送到您编写的程序(例如,在Exim中,您可以使用)。在该程序中,您可以直接处理它,也可以将其发布到flask应用程序中
mail_daemon.py
文件作为cron作业每5分钟运行一次。它使用poplib
Python包连接到电子邮件服务器,处理那里的电子邮件,然后断开连接(我不得不指出的一点是,在处理电子邮件之前,我会检查电子邮件是否来自我:)
然后,我的Flask应用程序为书签提供前端,从数据库中显示书签
我决定不将电子邮件处理代码放入实际的flask应用程序中,因为它可能相当慢,并且只会在访问页面时运行,但如果您愿意,可以这样做
下面是一些让事情进展顺利的基本代码:
import poplib
from email import parser
from email.header import decode_header
import os
import sys
pop_conn = poplib.POP3_SSL('pop.example.com')
pop_conn.user('my-app@example.com')
pop_conn.pass_('password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message into an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
# check message is from a safe recipient
if 'me@example.com' in message['from']:
# Get the message body text
if message['Content-Type'][:4] == 'text':
text = message.get_payload() #plain text messages only have one payload
else:
text = message.get_payload()[0].get_payload() #HTML messages have more payloads
# decode the subject (odd symbols cause it to be encoded sometimes)
subject = decode_header(message['subject'])[0]
if subject[1]:
bookmark_title = subject[0].decode(subject[1]).encode('ascii', 'ignore') # icky
else:
bookmark_title = subject[0]
# in my system, you can use google's address+tag@gmail.com feature to specifiy
# where something goes, a useful feature.
project = message['to'].split('@')[0].split('+')
### Do something here with the message ###
pop_conn.quit()
您是否有可以将电子邮件转发到Python进程的工作程序?是否要实现电子邮件服务器?这不是一种非常有效的方式——我建议使用已经投入生产的邮件服务器,并实现一个客户端,用于轮询新邮件(或使用IMAP实时接收邮件)。我应该提到:我正在与heroku合作,它可能有一个MDA附加项。这也是最后一个选择,那就是使用第三方帮助实现这一点。我写了一篇特定于rails的博客文章(但应该可以很容易地应用于Python),内容是关于仍然相关的选项。().