如何用 Python 编写一个简单的电子邮件监听器
Posted
技术标签:
【中文标题】如何用 Python 编写一个简单的电子邮件监听器【英文标题】:How to write a simple email listener in Python 【发布时间】:2017-05-21 21:23:52 【问题描述】:我对 Python (v2.7) 完全陌生,我需要编写一个简单的程序,该程序可以连续运行,监听 gmail 帐户并在该帐户收到电子邮件时调用一个函数。到目前为止,使用 Python 的内置 IMAP 或 SMTP 库似乎是最好的选择,但我对它们不是很熟悉,更不用说 Python 本身了。
到目前为止,我想出的是能够连接到电子邮件并通过 IMAP4 找到最新的电子邮件,但它缺乏一种持续检查是否收到新电子邮件的方法:
(Source)
import imaplib
import email
#logs in to the desired account and navigates to the inbox
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('email@gmail.com','password')
mail.list()
mail.select('inbox')
result, data = mail.search(None,'ALL')
#retrieves the latest (newest) email by sequential ID
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
任何关于如何调整它以连续运行并检查新传入消息的帮助都会很棒。谢谢!
【问题讨论】:
您可以使用定时线程,例如sched
模块或任何其他各种方法来创建重复任务来执行此操作。
我认为您可能需要使用 pop3。一定要查一下,我认为是电子邮件事件,当收到电子邮件时会通知您。但是您仍然需要在后台运行它
您可以根据需要专门搜索“新”。
请不要学习 2.7,学习 Python 3,这是 Python 的未来,学习 2.7 的人会阻止语言
imaplib 本身不包含任何事件功能,它是一个非常低级的库。您可以在循环中轮询新邮件,或者您可以尝试查找实际上内置此类内容的更高级别的库。
【参考方案1】:
使用 threading 模块和子类 threading.Thread。文档可以在这里找到:https://docs.python.org/2/library/threading.html
import threading
import time
class MailThread(threading.Thread):
然后您的代码进入run()
,您必须在其中添加一些延迟。假设是 1000 秒。
def run():
#your code here
time.sleep(1000)
脚本的最后一部分如下所示
if __name__ == '__main__':
mail_thread = MailThread()
mail_thread.start()
# do other stuff
或
收到邮件后,只需使用带有time.sleep()
和break
的while(True)
循环即可。
【讨论】:
以上是关于如何用 Python 编写一个简单的电子邮件监听器的主要内容,如果未能解决你的问题,请参考以下文章
如何用python编写可使用cmd控制台传入参数的简单四则算式计算器
python 请教一下如何用wincon监听windouws的WM_QUERYENDSESSION关机事件,触发一个事件。