使用Python获取电子邮件,始终连接

时间:2015-02-05 15:08:23

标签: python

我使用以下Python脚本来获取新电子邮件。但是,我每次都必须运行此脚本来检查或安排系统运行脚本。

是否可以保持开放式连接并在收到电子邮件时收到邮件?如果是这样会对我的服务器产生什么影响?

import imaplib

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('email@domain.com', 'password')

mail.list()
# Out: list of "folders" aka labels in gmail.
mail.select("inbox")  # connect to inbox.

result, messages = mail.search(None, "UNSEEN")

if result == 'OK':
    for num in messages[0].split():
        # Do Stuff

2 个答案:

答案 0 :(得分:2)

我做过类似的事情,通常让脚本尽可能简单,没有循环,只是将它安排为cron作业。

你做得越复杂,它就越有可能破坏。如果您尝试收到邮件并且会话已过期会怎样?或者你丢失了一分钟的网络连接,或者gmail停了一会儿?现在你必须添加try / except以防止整个脚本崩溃。

使用简单的cron作业,如果失败则没什么大不了的 - cron将在x分钟后重试。

答案 1 :(得分:1)

while循环对此非常适合。每10个小时左右打破一次可能是一个好主意。或者,您可以在醒来时开始检查,在您入睡时停止检查。 (当然要处理深夜,你应该添加一些东西,检查你是否真的很晚地运行脚本,并且只更新一次或两次。)

如果您的意思是“我的服务器”,就像在电子邮件服务器中那样,它不会产生太大影响。从本质上讲,这就像刷新你的Gmail收件箱,我知道至少可以做一个小时。如果你的意思是“我的服务器”意味着这个脚本将在你的远程服务器上运行,那么这应该不是问题。这个小的脚本可能只会占用你的一小部分系统资源。除非你每周通过电子邮件发送数十亿字节的数据,否则我不希望网络受到影响,因为脚本和gmails服务器之间的消息不是那么大。