标签: imaplib

'str'对象没有属性'decode'.Python 3错误?

这是我的代码:

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

此时我收到错误消息

AttributeError: 'str' object has no attribute 'decode'
Run Code Online (Sandbox Code Playgroud)

Python 3不再有解码,我是对的吗?我怎样才能解决这个问题?

另外,在:

data = conn.fetch('1', '(BODY[HEADER])')
Run Code Online (Sandbox Code Playgroud)

我只选择第一封电子邮件.我该如何选择全部?

python imaplib python-3.x

149
推荐指数
9
解决办法
29万
查看次数

使用Python和imaplib在GMail中移动电子邮件

我希望能够使用Python将GMail中的电子邮件从收件箱移动到另一个文件夹.我使用imaplib,无法弄清楚如何做到这一点.

python gmail imap imaplib

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

使用imaplib获取电子邮件但不要将其标记为SEEN

我想从用户的收件箱中解析一些电子邮件,但是当我这样做时:

typ, msg_data = imap_conn.fetch(uid, '(RFC822)')
Run Code Online (Sandbox Code Playgroud)

它将电子邮件标记为SEEN或阅读.这不是所需的功能.你知道我怎么能把电子邮件保持在以前的凝视中看到或不看?

python gmail imaplib

23
推荐指数
2
解决办法
8032
查看次数

如何在python中使用imaplib获取电子邮件正文?

我想从IMAP4服务器获取整个消息.在python docs中,如果发现这段代码有效:

>>> t, data = M.fetch('1', '(RFC822)')
>>> body = data[0][1]
Run Code Online (Sandbox Code Playgroud)

我想知道我是否总能相信数据[0] [1]返回消息正文.当我运行'RFC822.SIZE'时,我只有一个字符串而不是一个元组.

我已经浏览了rfc1730,但我无法找出'RFC822'的正确响应结构.从imaplib文档中判断获取结果结构也很困难.

这是我在获取时获得的内容RFC822:

('OK', [('1 (RFC822 {858569}', 'body of the message', ')')])
Run Code Online (Sandbox Code Playgroud)

但当RFC822.SIZE我拿到我的时候:

('OK', ['1 (RFC822.SIZE 847403)'])
Run Code Online (Sandbox Code Playgroud)

我该如何正确处理数据[0]列表?我可以相信,当它是一个元组列表时,元组恰好有3个部分而第二部分是有效负载吗?

也许你知道imap4的更好的库?

python imaplib

22
推荐指数
3
解决办法
5万
查看次数

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

我正在使用pythons imaplib连接到我的Gmail帐户.我想检索前15条消息(未读或读取,无关紧要)并仅显示主题和发件人姓名(或地址),但不知道如何显示收件箱的内容.

这是我到目前为止的代码(成功连接)

import imaplib

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mygmail@gmail.com', 'somecrazypassword')
mail.list()
mail.select('inbox')

#need to add some stuff in here

mail.logout()
Run Code Online (Sandbox Code Playgroud)

我相信这应该很简单,我对imaplib库的命令还不够熟悉.任何帮助都必须得到赞赏......

更新 感谢Julian我可以遍历每条消息并检索整个内容:

typ, data = mail.search(None, 'ALL')
for num in data[0].split():
   typ, data = mail.fetch(num, '(RFC822)')
   print 'Message %s\n%s\n' % (num, data[0][1])
mail.close()
Run Code Online (Sandbox Code Playgroud)

但我只想要主题和发送者.是否有针对这些项目的imaplib命令,或者我是否必须解析文本的全部内容[0] [1]:主题和发件人?

更新 确定,让主题和发件人部分工作,但迭代(1,15)由desc命令完成,显然首先显示最旧的消息.我怎么能改变这个?我试过这样做:

for i in range( len(data[0])-15, len(data[0]) ):
     print data
Run Code Online (Sandbox Code Playgroud)

但这只是给了我None所有15次迭代......任何想法?我也试过mail.sort('REVERSE DATE', 'UTF-8', 'ALL')但是gmail不支持.sort()函数

更新 找出一种方法:

#....^other code is the same as above except need to import email module …
Run Code Online (Sandbox Code Playgroud)

python gmail email-headers imaplib

22
推荐指数
3
解决办法
4万
查看次数

如何理解IMAP电子邮件文本中的等号'='符号?

我目前正在使用Python imaplib来处理电子邮件文本.

我使用fetch命令从GMail服务器获取原始数据电子邮件.但是,我发现有一件事很棘手 - 等号'='.它不是正常的等号,而是一个特殊的符号.

例如:

  1. '='有时用作文本行末尾的连字符标记:

    Depending upon your module selections, course lecturers may also contact yo=
    u with preparatory work over the next few weeks. It would be wise to start =
    reviewing the preparatory reading lists provided on the module syllabi now =
    
    Run Code Online (Sandbox Code Playgroud)
  2. 有时,它充当类似'%'的转义标记,例如:

    a=20b实际上实际上a<SPACE>b
    =46rom hereFrom here

我对这种奇怪的符号感到困惑.我认为必须有一个指导来处理这个,因为GMail可以在他们的应用程序中正确处理这样的事情.

我发现这与HTML编码有关,就像'%'将被编码一样.但问题是,我从IMAP响应得到的只是一个包含这个'='符号的字符串.我该怎么处理?使用正则表达式?

html python imap imaplib gmail-imap

22
推荐指数
1
解决办法
6370
查看次数

只获取新的电子邮件imaplib和python

这是较大项目的一小部分.我只需要获取未读电子邮件并解析其标题.如何修改以下脚本以仅获取未读电子邮件?

conn = imaplib.IMAP4_SSL(imap_server)
conn.login(imap_user, imap_password)

status, messages = conn.select('INBOX')    

if status != "OK":
    print "Incorrect mail box"
    exit()

print messages
Run Code Online (Sandbox Code Playgroud)

python imaplib

20
推荐指数
4
解决办法
5万
查看次数

如何使用Python imaplib回复电子邮件并包含原始邮件?

我目前正在使用imaplib从服务器获取电子邮件并处理内容和附件.

我想回复带有状态/错误消息的消息,并链接到我的网站上生成的内容,如果可以处理的话.这应该包括原始邮件,但应删除任何附件(这将是大的),并最好用他们的文件名/大小替换它们.

由于我已经走过MIME消息部分,我假设我需要做的是构建一个包含原始消息副本的新MIME消息树并删除/替换附件节点.

在我开始走这条道路之前,我希望有人可以给我一些提示.有没有任何类型的库函数可以做到这一点?我应该坚持的任何标准行为?

我目前知道的/我使用的imaplib,smtplibemail模块和,但可能错过了一些东西在里面明显.这也在Django中运行,因此可以使用任何内容,django.core.email如果这样可以更容易.

python email django mime imaplib

16
推荐指数
1
解决办法
8080
查看次数

无法从收件箱以外的任何文件夹中检索gmail邮件(Python3问题)

更新:我的代码在python 2.6.5下工作但不是python 3(我使用的是3.4.1).

我无法在"所有邮件"或"已发邮件"文件夹中搜索邮件 - 我得到一个例外:

imaplib.error: SELECT command error: BAD [b'Could not parse command']
Run Code Online (Sandbox Code Playgroud)

我的代码:

import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("[Gmail]/All Mail")
Run Code Online (Sandbox Code Playgroud)

使用m.select("[Gmail]/Sent Mail")也不起作用.

但是从收件箱中读取有效:

import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("inbox")
...
Run Code Online (Sandbox Code Playgroud)

我使用mail.list()命令来验证文件夹名称是否正确:

b'(\\HasNoChildren) "/" "INBOX"', 
b'(\\Noselect \\HasChildren) "/" "[Gmail]"',
b'(\\HasNoChildren \\All) "/" "[Gmail]/All Mail"', 
b'(\\HasNoChildren \\Drafts) "/" "[Gmail]/Drafts"', 
b'(\\HasNoChildren \\Important) "/" "[Gmail]/Important"', 
b'(\\HasNoChildren \\Sent) "/" "[Gmail]/Sent Mail"', 
b'(\\HasNoChildren \\Junk) "/" "[Gmail]/Spam"', 
b'(\\HasNoChildren \\Flagged) "/" "[Gmail]/Starred"', 
b'(\\HasNoChildren \\Trash) "/" "[Gmail]/Trash"'
Run Code Online (Sandbox Code Playgroud)

我正在关注这些问题的解决方案,但它们对我不起作用:
imaplib …

python email gmail imaplib python-3.x

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

用imaplib读取电子邮件 - "超过10000字节"错误

我正在尝试使用imaplib连接到我的gmail帐户:

import imaplib
mail = imaplib.IMAP4_SSH('imap.gmail.com')
mail.login('myemail@gmail.com', 'mypassword')
mail.select("inbox")
# returns ('OK', [b'12009'])
Run Code Online (Sandbox Code Playgroud)

然而,这一切似乎都很好用:

mail.search(None, "ALL")
# returns error: command: SEARCH => got more than 10000 bytes
mail.logout()
# returns ('NO',
# ["<class 'imaplib.IMAP4.error'>: command: LOGOUT => got more than 10000 bytes"])
Run Code Online (Sandbox Code Playgroud)

我正在尝试访问的帐户在收件箱中有大约9,000封电子邮件.我尝试了上面的另一个帐户,其中少于1,000,代码工作正常.

第一个电子邮件帐户的问题是否与其中的邮件数量相关?是否有一些默认设置实现了一些大小限制?

如何绕过错误并阅读我的电子邮件?

python gmail imaplib

14
推荐指数
1
解决办法
3676
查看次数

标签 统计

imaplib ×10

python ×10

gmail ×5

email ×2

imap ×2

python-3.x ×2

django ×1

email-headers ×1

gmail-imap ×1

html ×1

mime ×1