使用 Python 检查未读的 Gmail 邮件数

     2023-03-14     8

关键词:

【中文标题】使用 Python 检查未读的 Gmail 邮件数【英文标题】:Check unread count of Gmail messages with Python 【发布时间】:2010-10-31 12:19:29 【问题描述】:

如何使用简短的 Python 脚本检查收件箱中未读 Gmail 邮件的数量?从文件中检索密码的奖励积分。

【问题讨论】:

【参考方案1】:
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')

【讨论】:

我真的很喜欢这个解决方案。通常只需一次导入即可清洁。要获得您只需: len(obj.search(None, 'UnSeen')[1][0].split()) 我可以使用此解决方案获取邮件正文和主题吗? @DataGreed:通过搜索,您只能获得邮件 ID,但您可以将其与“obj.fetch(...”一起使用以获取您想要的邮件。例如,请参阅此链接如何做到这一点:yuji.wordpress.com/2011/06/22/… 使用这个我收到通知,有人刚刚使用我的密码尝试使用不安全的应用程序登录,并带有指向此文档的链接:support.google.com/accounts/answer/… 对于那些对使用 imaplib 连接到 gmail 感到好奇的人,谷歌会定期禁用 3rd 方访问,您必须手动启用它。最好创建一个应用程序并使用 gmail api。【参考方案2】:

好吧,我将继续按照 Cletus 的建议详细说明 imaplib 解决方案。我不明白为什么人们觉得有必要为此使用 gmail.py 或 Atom。这种事情就是 IMAP 的设计目的。 Gmail.py 特别令人震惊,因为它实际上解析了 Gmail 的 HTML。这对于某些事情可能是必要的,但不是为了获得消息计数!

import imaplib, re
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(username, password)
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)

预编译正则表达式可能会略微提高性能。

【讨论】:

虽然我碰巧同意 IMAP 是这里的方式,但可能会出现一些可移植性问题。由于其他方法使用 HTTP 连接,因此可以想象它们可以在 IMAP 不可用的情况下工作(在 Google App Engine 等限制性环境中或在非 HTTP 流量受到限制的网络中)。 汤姆,这是真的。但是 OP 并没有说他们正在处理这些限制,所以我们不应该过早地发明它们。【参考方案3】:

我建议你使用Gmail atom feed

就这么简单:

import urllib

url = 'https://mail.google.com/mail/feed/atom/'
opener = urllib.FancyURLopener()
f = opener.open(url)
feed = f.read()

然后您可以在这篇精彩的文章中使用提要解析功能:Check Gmail the pythonic way

【讨论】:

IMAP 有什么不好?请注意,尽管“这么简单”,但这个 sn-p 并不完整。 另请注意,此解决方案将提示用户在 TTY 上输入用户名、密码。但是,您可以将 opener 子类化来处理这个问题。 它总是为我返回未经授权的文件“/opt/python2.7/lib/python2.7/urllib.py”,第 379 行,在 http_error_default 中引发 IOError,('http 错误',errcode, errmsg, headers) IOError: ('http error', 401, 'Unauthorized', )【参考方案4】:

关于从原子提要中读取值的完整实现:​​

import urllib2
import base64
from xml.dom.minidom import parse

def gmail_unread_count(user, password):
    """
        Takes a Gmail user name and password and returns the unread
        messages count as an integer.
    """
    # Build the authentication string
    b64auth = base64.encodestring("%s:%s" % (user, password))
    auth = "Basic " + b64auth

    # Build the request
    req = urllib2.Request("https://mail.google.com/mail/feed/atom/")
    req.add_header("Authorization", auth)
    handle = urllib2.urlopen(req)

    # Build an XML dom tree of the feed
    dom = parse(handle)
    handle.close()

    # Get the "fullcount" xml object
    count_obj = dom.getElementsByTagName("fullcount")[0]
    # get its text and convert it to an integer
    return int(count_obj.firstChild.wholeText)

【讨论】:

【参考方案5】:

好吧,这不是代码 sn-p,但我想使用 imaplib 和 Gmail IMAP instructions 可以帮助您完成大部分工作。

【讨论】:

【参考方案6】:

一旦您登录(手动或使用 gmail.py),您应该使用该提要。

它位于这里: http://mail.google.com/mail/feed/atom

这就是 Google 的做法。这是他们的 js chrome 扩展的链接: http://dev.chromium.org/developers/design-documents/extensions/samples/gmail.zip

然后您将能够解析如下所示的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Gmail - Inbox for yourmail@gmail.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>142</fullcount>

【讨论】:

【参考方案7】:

使用Gmail.py

file = open("filename","r")
usr = file.readline()
pwd = file.readline()
gmail = GmailClient()
gmail.login(usr, pwd)
unreadMail = gmail.get_inbox_conversations(is_unread=True)
print unreadMail

假设登录名和密码位于不同的行,则从文本文件中获取登录信息。

【讨论】:

我检查了模块源代码,它以 html 模式打开 gmail 并解析页面。这是不好的! holovaty.com/code/gmail.py readline 包含一个尾随换行符,您不希望在此处使用它。 纳迪亚是对的。这将浪费大量时间和带宽。 那个 gmail.py(幸运的是)已经不存在了。

gmail:如何快速将邮件全部已读

本文详细讲解如何将Gmail邮箱中的未读邮件批量设为全部已读。以前,Gmail邮箱还提供全部未读邮件一键已读的功能,但现在,这个功能被取消了。即便如此,我们还是可以用下面的方法,快速的筛选出未读邮件,并快速的设为... 查看详情

table表格怎么使用vue写一个消息未读的状态?

您的浏览器不支持HTML5视频zymedia(\'video\')参考技术A根据参数判断是否已读未读,改变那个点颜色就可以了 查看详情

Javascript;使用 Gmail API 无服务器检索未读电子邮件

】Javascript;使用GmailAPI无服务器检索未读电子邮件【英文标题】:Javascript;Server-lessretrievingofunreademailswithGmailAPI【发布时间】:2013-07-1215:43:45【问题描述】:由于OAuth2,许多API无需任何服务器即可从客户端访问。我正在尝试处理Gm... 查看详情

如何仅从特定 gmail 标签下载未读附件?

...问题描述】:我有一个改编自DownloadingMMSemailssenttoGmailusingPython的Python脚本importemail,getpass,imaplib,osdetach_dir=\' 查看详情

使用 Google Apps 脚本获取已发送文件夹中的未读计数 - GMail

】使用GoogleApps脚本获取已发送文件夹中的未读计数-GMail【英文标题】:GettingunreadcountinSentFolderusingGoogleAppsScript-GMail【发布时间】:2013-02-2807:56:39【问题描述】:有没有办法在已发送文件夹中获取未读邮件计数?基本上,我想要... 查看详情

Gmail API 读取所有邮件而不是未读邮件

...【发布时间】:2020-04-2810:54:25【问题描述】:我正在尝试使用以下代码从gmail帐户中获取所有未读邮件msgs=service.users().messages().list(userId=\'me\',q=\'in:inboxis:unread\').execute() 查看详情

sql标签未读的帖子(代码片段)

查看详情

SMTP 的哪些实现通常处理邮件数据以响应 DATA 之后的 RSET?

】SMTP的哪些实现通常处理邮件数据以响应DATA之后的RSET?【英文标题】:WhatimplementationsofSMTPtypicallydowiththemaildatainresponsetoRSETafterDATA?【发布时间】:2017-03-1811:42:25【问题描述】:这是我从RFC5321中收集到的内容:4.1.1.5。重置(RSET... 查看详情

从 Gmail 中检索未读电子邮件 - JavaMail API + IMAP

...文,而第二封邮件则给了我带有html标签的正文。我正在使用Jav 查看详情

使用 Python 检查电子邮件

】使用Python检查电子邮件【英文标题】:CheckingemailwithPython【发布时间】:2010-11-1613:41:36【问题描述】:我有兴趣在收到来自特定的电子邮件时触发特定操作带有特定主题的地址。为了能够做到这一点,我需要实施监控我的邮箱... 查看详情

Gmail API 多个帐户

...想在其中显示所有4封邮件中未读邮件的数量。但是当我使用一个帐户进行身份验证时,它不会显示其他帐户的计数。有什么方法可以让多个帐户保持登录状态?我想要像这样的输出;邮件1:10封未读邮件邮件2:9封未读邮件等等... 查看详情

gmail今日未读邮件书签

Thisismyfirsteverbookmarklet.It'ssimpleandcouldbetightenedupbutitworksforme(FF3Ubuntu8.10).Oh,bytheway,whatitdoesisloadgmail(ifyou'resignedin,whichIalwaysam)withasearchfortheunreadmessages(is:unread)ofthecurrentday(after:2009-4-7,forexample).Ohyeah.Ifyouwanttouseitjustcreateabookmarkinyour... 查看详情

imaplib/gmail 如何在不标记为已读的情况下下载完整消息(所有部分)[重复]

...】:我无意中将收件箱中的所有邮件都标记为已阅读这条python语句:status,data=conn.uid(\'fetch\ 查看详情

python imaplib 获取 gmail 收件箱主题标题和发件人姓名

...ername【发布时间】:2011-11-1100:16:52【问题描述】:我正在使用pythonsimaplib连接到我的gmail帐户。我想检索前15条消息(未读或已读,没关系),只显示主题和发件人姓名(或地址),但不知道如何显示收件箱的内容。这是我目前的 查看详情

我可以使用 gmail 作为我网站的 smtp 服务器吗

】我可以使用gmail作为我网站的smtp服务器吗【英文标题】:CanIusegmailassmtpserverformywebsite【发布时间】:2012-08-2418:19:58【问题描述】:您好,我正在尝试建立一个网站并开始运行。它目前托管在AWS上,因此我目前没有运行自己的smt... 查看详情

JavaMail 使用 IMAP 读取最近的未读邮件

】JavaMail使用IMAP读取最近的未读邮件【英文标题】:JavaMailreadingrecentunreadmailsusingIMAP【发布时间】:2015-04-2516:20:13【问题描述】:我需要从Gmail中检索未读邮件。我正在使用Java邮件API。默认情况下,此API从最旧到最新检索邮件。... 查看详情

如何使用 Python 计算目录中的文件数

】如何使用Python计算目录中的文件数【英文标题】:HowtocountthenumberoffilesinadirectoryusingPython【发布时间】:2011-02-0714:24:13【问题描述】:我需要使用Python计算目录中的文件数。我猜最简单的方法是len(glob.glob(\'*\')),但这也将目录... 查看详情

如何使用 NLTK 检查不可读的 OCRed 文本

】如何使用NLTK检查不可读的OCRed文本【英文标题】:HowtocheckforunreadableOCRedtextwithNLTK【发布时间】:2014-06-0903:27:31【问题描述】:我正在使用NLTK分析已被OCRed的语料库。我是NLTK的新手。大多数OCR都很好——但有时我会遇到明显是... 查看详情