如何用 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()breakwhile(True) 循环即可。

【讨论】:

以上是关于如何用 Python 编写一个简单的电子邮件监听器的主要内容,如果未能解决你的问题,请参考以下文章

如何用python编写计算器

如何用socket构建一个简单的Web Server

如何用IDLE编写python代码

如何用python编写可使用cmd控制台传入参数的简单四则算式计算器

python 请教一下如何用wincon监听windouws的WM_QUERYENDSESSION关机事件,触发一个事件。

如何用python通过163发送邮件