使用Python检查电子邮件

Sas*_*sha 51 python email

我有兴趣在收到特定主题的特定地址的电子邮件时触发某项操作.为了能够这样做,我需要实现对我的邮箱的监控,检查每个传入的邮件(特别是,我使用gmail).最简单的方法是什么?

maz*_*ife 72

Gmail提供了通过POP进行连接的功能,您可以在Gmail设置面板中打开该功能.Python可以很容易地通过POP建立连接:

import poplib
from email import parser

pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('username')
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 intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print message['subject']
pop_conn.quit()
Run Code Online (Sandbox Code Playgroud)

您只需要将此脚本作为cron作业运行.不知道你在YMMV上的平台是怎么做的.

  • 要使此代码在Python3中运行,请添加"import email"并更改以下两行:messages = [b"\n".join(mssg [1])for mssg in messages] ;; messages = [email.message_from_bytes(mssg)for mssg in messages] (5认同)
  • 在POP模式下,gmail只允许您检索一次消息.后续连接不会显示该消息.除非发生两件事之一:你有"近期模式"开启了吗?请参阅此处:http://mail.google.com/support/bin/answer.py?answer=47948了解如何禁用它.或者,如果gmail实际上每次都给你相同的电子邮件,可能是因为你的pop连接没有调用quit()方法.是否有一个例外可能是被提出但是在调用戒烟之前没有被抓住?然后gmail会给你同样的邮件. (2认同)
  • @tumbleweed你应该收到谷歌的电子邮件,链接到:https://myaccount.google.com/lesssecureapps.必须启用此功能才能使其正常工作. (2认同)

Dan*_*ane 19

Gmail 为新电子邮件提供原子Feed.您应该能够通过使用py cURL(或其他一些网络库)进行身份验证并下拉Feed来监控此情况.对每封新邮件发出GET请求应将其标记为已读,因此您无需跟踪已阅读的电子邮件.


Ale*_*lli 8

虽然不是特定于Python的,但我总是喜欢procmail,无论我在哪里安装它......!

只需使用您选择条件的某些操作行| pathtoyourscript(垂直条AKA管道,然后是您希望在这些情况下执行的脚本),并在您选择的条件下将邮件传送到您选择的脚本,为了它做任何想做的事情 - 很难想到一个更通用的方法来"在收到满足你特定条件的邮件时触发你选择的行动!!当然,你可以检查多少条件,如何限制单个条件可以触发的许多动作行(只需将所需的所有动作行括在{ }大括号中)等.

  • @J.彼得森,你在开玩笑,对吧?!`| pathtoyourscript`你可以开始你选择的脚本,并在满足你最喜欢的条件时将你的邮件传递给它,并且脚本可以做任何它想要的 - 这怎么不"触发一个动作"?! (5认同)

Ada*_*son 5

人们似乎对拉姆森感到兴奋:

https://github.com/zedshaw/lamson

它是一个完全用 Python 编写的 SMTP 服务器。我相信您可以利用它来完成您需要的一切 - 只需将 Gmail 消息转发到该 SMTP 服务器,然后执行您想做的事情。

然而,我认为执行上面的 ATOM feed 推荐可能是最简单的。

编辑:拉姆森已被放弃