标签: imaplib

解析imaplib返回的Message-ID标头

我通过IMAP从Gmail中的电子邮件中获取messageid.

这段代码:

messageid = m.fetch(num, '(BODY[HEADER.FIELDS (MESSAGE-ID)])')
print messageid
Run Code Online (Sandbox Code Playgroud)

返回:

[('1 (BODY[HEADER.FIELDS (MESSAGE-ID)] {78}', 'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n'), ')']
Run Code Online (Sandbox Code Playgroud)

我将如何解析实际的消息ID?

python email-headers imaplib

3
推荐指数
1
解决办法
2642
查看次数

Imap搜索条件 - imaplib(python)

我正在使用imaplib进行python,我遇到了一个奇怪的行为.我真的不知道这是一个imap ou imaplib问题/功能,所以我希望有人能给我一些灯光.

在我的项目中,我在我的Gmail邮箱上进行了几次搜索.想象一下,我使用以下标准进行imap搜索:

((自"日期A"起)(在"日期B"之前))

现在,如果我从"日期A"开始收到电子邮件,则imap(lib)会执行预期的操作:返回"日期A"之后和"数据B"之前的电子邮件.可爱.但是,如果我从"日期A"开始没有电子邮件,imap(lib)就会忽略它并在"日期B"之前返回所有电子邮件,即使它们不是"数据A"!

这是imap的预期行为吗?我真的不这么认为,根本没有意义.

我真的需要能够搜索任何给定的时间段,而且我在每次搜索之前都不必将盒子集中在一起以了解最后一封电子邮件的日期.

任何的想法?我在这里错过了什么吗?

python gmail imap imaplib

3
推荐指数
1
解决办法
5265
查看次数

如何识别人类发送的电子邮件?

我正在开发一个项目,需要识别真人发送的电子邮件,而不是批量邮件、通知和时事通讯。有什么明确的方法可以做到这一点吗?电子邮件标题中是否有任何可以提供帮助的信息。我正在 Gmail IMAP 上工作,因此我已经有非垃圾邮件。

感谢这方面的任何帮助。谢谢!

email imap email-spam email-headers imaplib

3
推荐指数
1
解决办法
456
查看次数

在Python中捕获imaplib异常(使用IMAPClient包)

我正在使用外部库IMAPClient.登录失败时,我看到此错误:imaplib.error: [AUTHENTICATIONFAILED] Authentication failed.

当我尝试except imaplib.error:我得到:AttributeError: 'module' object has no attribute 'error'

imaplib的文档说异常应该是IMAP4.error那么为什么IMAPClient会提升imaplib.error,我该如何捕获呢?

python imaplib

3
推荐指数
1
解决办法
3757
查看次数

提高python中IMAP批量消息删除的速度

目标是使用imaplib删除大量电子邮件.电子邮件文件夹每月收到大约300,000条新邮件.只应删除超过1个月的邮件.如果执行此脚本,它将删除旧消息,但删除需要花费大量时间,而且迭代操作简单无效.这需要几个小时.通过尝试通过多处理来提高速度会产生错误.

你有什么建议可以提高删除大量邮件的速度?

import sys
import datetime
from imaplib import IMAP4

# get the date a month from the current
monthbefore = (datetime.date.today() - datetime.timedelta(365/12)).strftime("%d-%b-%Y")

m = IMAP4('mail.domain.com')
m.login('user@domain.com', 'password')

# shows how many messages in selected folder
print m.select('Folder')
typ, data = m.select('Folder')

# find old messages
typ, data = m.search(None, '(BEFORE %s)' % (monthbefore))

# delete them
print "Will be removed:\t", data[0].split()[-1],"messages"
for num in data[0].split():
  m.store(num, '+FLAGS', '\\Deleted')
  sys.stderr.write('\rRemoving message:\t %s' % num)

# now expunge marked for …
Run Code Online (Sandbox Code Playgroud)

python iteration imaplib

3
推荐指数
1
解决办法
2299
查看次数

使用 Python 和 imaplib 处理编码消息

在过去的几天里,我一直在编写一个脚本来解析自动生成的帮助台票证并将其内容存储到数据库中。在测试时,我遇到了几封电子邮件,这些电子邮件似乎已被编码并导致脚本失败。下面是其中一个 RFC822 的示例:

"[(b'9255 (RFC822 {12558}', b'发送至: XXXXXXXXX\r\n已接收: 通过 10.220.77.132,SMTP ID g4csp176213vck;\r\n 2014 年 7 月 28 日星期一 09:37:05 -0700 (PDT)\r\nX-已接收:于 10.67.30.130 接收,SMTP ID ke2mr39896936pad.44.1406565425185;\r\n 2014 年 7 月 28 日星期一 09:37:05 -0700 (PDT)\r\n返回路径: \r\ n已接收:来自 XXXXXXXXX (XXXXXXXXX [74.125.149.112])\r\n,由 XXXXXXXXX 发送,SMTP ID 为 yh3si18379315pab.170.2014.07.28.09.37.04\r\n ;\r\n 2014 年 7 月 28 日星期一 09:37:04 -0700 (PDT)\r\n已接收 SPF: 无(XXXXXXXXX: XXXXXXXXX 未指定允许的发件人主机) client-ip=74.125.149.141;\r\n身份验证结果: XXXXXXXXX;\r\n spf=中性 (XXXXXXXXX : XXXXXXXXX 未指定允许的发件人主机) v\r\n已接收:由 XXXXXXXXX ([74.125.148.10]) 使用 SMTP 从 XXXXXXXXX ([74.125.149.141]) 发送;\r\n\tMon, 28 Jul 2014 16:37: 04 GMT\r\n已接收:由 …

python imaplib

3
推荐指数
1
解决办法
4119
查看次数

使用Python邮箱模块保存IMAP消息

我正在将消息从 IMAP 下载imaplib到 mbox(带mailbox模块)中:

import imaplib, mailbox
svr = imaplib.IMAP4_SSL('imap.gmail.com')
svr.login('myname@gmail.com', 'mypaswword')
resp, [countstr] = svr.select("[Gmail]/All Mail", True)

mbox = mailbox.mbox('mails.mbox')

for n in range(...):
  resp, lst1 = svr.fetch(n, 'UID')    # the UID of the message
  resp, lst2 = svr.fetch(n, '(RFC822)')   # the message itself
  mbox.add(lst2[0][1])      # add the downloaded message to the mbox
  #
  # how to store the UID of this current mail inside mbox? 
  #
Run Code Online (Sandbox Code Playgroud)

让我们下载 UID = 的邮件1 .. 1000。下次,我想从第 …

python imap mbox imaplib

3
推荐指数
1
解决办法
4888
查看次数

将*** IMAP邮件标记为未读

在获取所有“未读”消息,然后遍历它们并获取它们之后,我试图在一条消息上操纵IMAP标志以将其标记为未读。

我不太确定如何在单个消息的基础上将消息标记为未读/看不见。我得到的只是消息编号,而且我不确定如何正确存储UID以仅影响单个消息。

相似问题中答案似乎无效,因为它将错误消息设置为“未读”。如何设置再次被提取为“未读” 的单个邮件?


我被要求提供更多信息。在这里删除“秘密”的细节时,这是我尝试实现的现有运行时,因此它将尝试根据代码规则处理消息,并存储消息号等,并尝试将消息的ID和主题存储在pickle文件中后,将每条消息设置为“未读”,因为在运行过程中“看到”的所有内容都会在服务器上自动标记为“已读”,而不会设置为“未读”状态:

def main():
    conn = imaplib.IMAP4('SERVER')
    conn.login('username', 'passphrase')

    conn.select('inbox')
    (status, nums) = conn.search(None, '(UNSEEN)')

    msgnums = map(int, nums[0].split())

    for i in msgnums:
        try:
            raw_msg = conn.fetch(i, '(RFC822)')

            raw_msg = conn.fetch(i, '(RFC822)')
            msg = email.message_from_string(raw_msg[1][0][1])
            body = "Date: %s\r\nSender: %s\r\nSubject: %s\r\n\r\n" % (msg['Date'], msg['From'], msg['Subject'])
            msg_date = re.sub('/', '-', msg['Date']).replace(":", ".")
            fdate = re.sub('\s+', '_', msg_date).replace(",", "")
            print "Checking message: %s" % msg['Subject']

            if not msg['Subject']:
                continue  # fname = …
Run Code Online (Sandbox Code Playgroud)

python email imaplib python-2.7

3
推荐指数
1
解决办法
1349
查看次数

python:如何捕获 imaplib.abort?

这是我的程序的相关部分:

    import imaplib
    ...
    try:
        M.expunge()
        M.close()
        M.logout()
    except imaplib.abort as e:
        print("IMAP abort")
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

Traceback (most recent call last):
 File "/home/xxx/anaconda3/lib/python3.6/imaplib.py", line 1014, in _command_complete
   typ, data = self._get_tagged_response(tag)
 File "/home/xxx/anaconda3/lib/python3.6/imaplib.py", line 1126, in _get_tagged_response
   self._check_bye()
 File "/home/xxx/anaconda3/lib/python3.6/imaplib.py", line 929, in _check_bye
   raise self.abort(bye[-1].decode(self._encoding, 'replace'))
imaplib.abort: IMAP session state is inconsistent, please relogin.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "mailstats/autoresponder.py", line 224, in <module>
   M.close()
 File "/home/xxx/anaconda3/lib/python3.6/imaplib.py", line 456, in …
Run Code Online (Sandbox Code Playgroud)

python exception imaplib

3
推荐指数
1
解决办法
1386
查看次数

Python:不断检查新电子邮件并提醒更多新电子邮件

我有这段代码可以检查最新的电子邮件,然后执行某些操作。是否可以编写一些内容来不断检查收件箱文件夹中是否有新邮件?尽管我希望它继续检查最新的新电子邮件。如果我尝试存储它已经通过了一次,它会变得太复杂吗?因此,它不会针对同一封电子邮件两次发出有关同一封电子邮件的警报。

代码:

import imaplib
import email
import Tkinter as tk

word = ["href=", "href", "<a href="] #list of strings to search for in email body

#connection to the email server
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('xxxx', 'xxxx')
mail.list()
# Out: list of "folders" aka labels in gmail.
mail.select("Inbox", readonly=True) # connect to inbox.

result, data = mail.uid('search', None, "ALL") # search and return uids instead

ids = data[0] # data is a list.
id_list = ids.split() # ids is a space separated …
Run Code Online (Sandbox Code Playgroud)

python email imaplib

2
推荐指数
1
解决办法
1万
查看次数