标签: imaplib

Python/imaplib - 如何获取邮件标签?

我正在为我的项目使用imaplib,因为我需要访问gmails帐户.事实:使用gmail的标签,每条消息可能位于任意数量的文件夹/盒子/标签上.

问题是我想从每条消息中获取每个标签.

我想到的第一个解决方案是使用"All Mail"文件夹来获取所有消息,然后,对于每条消息,检查该消息是否在每个可用文件夹中.

但是,我发现这个解决方案很重,我想知道是否有更好的方法来做到这一点.

谢谢!

python gmail imaplib

7
推荐指数
1
解决办法
4389
查看次数

Python imaplib 搜索包含日期和时间的电子邮件

我正在尝试阅读特定日期和时间的所有电子邮件。

mail = imaplib.IMAP4_SSL(self.url, self.port)
mail.login(user, password)
mail.select(self.folder)
since = datetime.strftime(since, '%d-%b-%Y %H:%M:%S')

result, data = mail.uid('search', '(SINCE "'+since+'")', 'UNSEEN')
Run Code Online (Sandbox Code Playgroud)

无需时间即可正常工作。是否也可以用时间来搜索?

python imaplib python-2.7 python-3.x

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

imaplib2:imap.gmail.com处理程序BYE响应:系统错误

我正在翻新一个python脚本,检查IMAP是否有新电子邮件,如果有新邮件则发送推送通知.问题是每隔几个小时我就会崩溃.起初我无法真正理解发生了什么,但后来我发现M.debug = 4这给了我一个很好的输出,但我仍然无法理解导致问题的原因.我已经将我的脚本和调试输出从正常行为发布到崩溃,希望在python中有更好理解的人可以告诉我发生了什么以及如何解决它.

编辑:

我按照以下答案中的建议编辑了我的代码:

while True:
    try:
      [call function that does all your logic]
    except imaplib2.IMAP4.abort:
      print("Disconnected.  Trying again.")
Run Code Online (Sandbox Code Playgroud)

或这个:

    while True:
        try:
          [call function that does all your logic]
except (imaplib2.IMAP4.abort, imaplib2.IMAP4.error) as e: 
      print("Disconnected.  Trying again.")
Run Code Online (Sandbox Code Playgroud)

但是在一段不确定的时间之后我仍然会遇到崩溃,而且异常永远不会被抓住.print("Disconnected. Trying again.")永远不会执行.

代码:

    #!/usr/local/bin/python2.7
    print "Content-type: text/html\r\n\r\n";

    import socket, ssl, json, struct, re
    import imaplib2, time
    from threading import *

    # enter gmail login details here
    USER="username@gmail.com"
    PASSWORD="password"
    # enter device token here
    deviceToken = 'my …
Run Code Online (Sandbox Code Playgroud)

python imap imaplib gmail-imap python-2.7

6
推荐指数
1
解决办法
2067
查看次数

具有多个条件的python imaplib搜索

我正在尝试使用搜索功能,但遇到了问题。我可以从 Gmail 帐户下载所有附件,并根据文件扩展名对它们进行排序。我的所有代码都可以正常工作,除非我向搜索添加了额外的条件。最初,搜索条件仅适用于 UNSEEN 电子邮件,它可以工作,然后将电子邮件标记为已看到并将其移至垃圾箱。然后我决定添加它。这是示例:原始:

resp, items = m.search (None, 'UNSEEN') 
Run Code Online (Sandbox Code Playgroud)

新的:

resp, items = m.search (None, '(FROM "email" SUBJECT "some text")', 'UNSEEN')
Run Code Online (Sandbox Code Playgroud)

结果是电子邮件被移到垃圾箱,仍然未读,也没有下载任何附件。任何人都知道我在这里可能做错了什么?谢谢。

python search imaplib

6
推荐指数
1
解决办法
7662
查看次数

以 HTML、imaplib 和 Django 的形式获取文本

我在 Python/Django 中使用 imaplib 获取电子邮件。

我的目标是阅读纯文本和 HTML 电子邮件。

我正在使用:

mail.select('inbox', readonly=True)
result, data = mail.uid('fetch', email_uid, '(RFC822)')

raw_email = data[0][1]
email_message = email.message_from_string(raw_email)

#print "EMAIL:",email_message
#print "HEADERS",email_message.items()

subject = get_decoded_header(email_message['Subject'])
from_address = get_decoded_header(email_message['From'])

date = email_message['Date']
date = parse_date(date)

body = ''+get_first_text_block(email_message)
Run Code Online (Sandbox Code Playgroud)

以及 get_first_text_block 的代码(从网上获得):

def get_first_text_block(email_message_instance):
    maintype = email_message_instance.get_content_maintype()

    if maintype == 'multipart':
        for part in email_message_instance.get_payload():
            if part.get_content_maintype() == 'text':
                return part.get_payload()
    elif maintype == 'text':
        return email_message_instance.get_payload()

    # In cases of emails with empty body
    return '' …
Run Code Online (Sandbox Code Playgroud)

django imaplib

5
推荐指数
1
解决办法
833
查看次数

如何连接 Python IMAP4_SSL 和自签名服务器 SSL 证书?

我正在使用 python3 并imaplib连接到 Exchange 服务器。Exchange 服务器使用为主机名“my.server.fqdn”创建的自签名证书。最近在我的工作站 (Ubuntu 14.04) 上升级操作系统后,我的 python 脚本不再有效。

我正在使用的基本代码片段在这里:

#!/usr/bin/python3

import imaplib
import socket
import ssl
import getpass

passwd = getpass.getpass()
mail =  imaplib.IMAP4_SSL('my.server.fqdn', 1143)  
mail.login('mike', passwd)
mail.list()
mail.select("INBOX")
Run Code Online (Sandbox Code Playgroud)

代码在升级之前运行良好。现在此代码产生此错误:

Traceback (most recent call last):
  File "./example.py", line 9, in <module>
    mail =  imaplib.IMAP4_SSL('my.server.fqdn', 1143)  
  File "/usr/lib/python3.4/imaplib.py", line 1222, in __init__
    IMAP4.__init__(self, host, port)
  File "/usr/lib/python3.4/imaplib.py", line 181, in __init__
    self.open(host, port)
  File "/usr/lib/python3.4/imaplib.py", line 1236, in open
    IMAP4.open(self, host, port)
  File "/usr/lib/python3.4/imaplib.py", line 257, …
Run Code Online (Sandbox Code Playgroud)

python ssl-certificate imaplib

5
推荐指数
1
解决办法
6412
查看次数

如何处理来自 Python imaplib 的 UTF8 字符串

Python imaplib 有时会返回如下所示的字符串:

=?utf-8?Q?Repertuar_wydarze=C5=84_z_woj._Dolno=C5=9Bl=C4=85skie?=
Run Code Online (Sandbox Code Playgroud)

这个符号的名称是什么?

如何将其解码(或者应该说编码?)为 UTF8?

python utf-8 imaplib

5
推荐指数
1
解决办法
3142
查看次数

Python imaplib 登录失败

我正在开发邮件应用程序,并遇到了 Python imaplib 的大问题。

这是我尝试用来登录邮件服务器的代码。

M = imaplib.IMAP4(self.server,int(self.port))
M.login(self.user, self.password)
Run Code Online (Sandbox Code Playgroud)

我在用着"port 143""useSLL = false"no secure
这是我尝试登录服务器时收到的消息。

DEBUG:root:Login failed.
Traceback (most recent call last):
  File "/opt/splunk/etc/apps/IMAPmailbox/bin/get_imap_email.py", line 347, in getMail
    M.login(self.user, self.password)
  File "/opt/splunk/lib/python2.7/imaplib.py", line 520, in login
    raise self.error(dat[-1])
error: Login failed.
None
Traceback (most recent call last):
  File "/opt/splunk/etc/apps/IMAPmailbox/bin/get_imap_email.py", line 724, in <module>
    parseArgs()
  File "/opt/splunk/etc/apps/IMAPmailbox/bin/get_imap_email.py", line 716, in parseArgs
    imapProc.getMail()
  File "/opt/splunk/etc/apps/IMAPmailbox/bin/get_imap_email.py", line 352, in getMail
    raise LoginError('Could not log into server: …
Run Code Online (Sandbox Code Playgroud)

python email imaplib

5
推荐指数
1
解决办法
9081
查看次数

如何使用 Python 从电子邮件内容中获取附加的 eml 文件?

我正在使用 python 3.7 和电子邮件,imap 库读取电子邮件并提取电子邮件和附件的内容,所有附件(如 excel、csv、pdf)都作为附件下载,但是当我在电子邮件中收到任何 .eml 文件时,它显示错误,请找到以下代码以读取电子邮件内容和附件,如果收到 eml 文件作为附件,则会显示错误。它在写入 eml 文件时显示错误。在写入时 part.get_payload(decode=True) 在 eml 文件中变为空白。

filename = part.get_filename()
if filename is not None:
    dot_position = filename.find('.')
    file_prefix = filename[0:dot_position]
    file_suffix = filename[dot_position:len(filename)]
    # print(dot_position)
    # print(file_prefix)
    # print(file_suffix)
    now = datetime.datetime.now()
    timestamp = str(now.strftime("%Y%m%d%H%M%S%f"))
    newFileName = file_prefix + "_" + timestamp + file_suffix
    sv_path = os.path.join(svdir, newFileName)
    # allfiles = allfiles.append([{"oldfilename": filename, "newfilename": newFileName}])
    mydict = filename + '$$' + newFileName
    mydict1 = mydict1 + ',' + mydict
    print(mydict1) …
Run Code Online (Sandbox Code Playgroud)

python imaplib python-3.x python-3.7

5
推荐指数
1
解决办法
1189
查看次数

imaplib.error:尝试在 python 中使用 imaplib 登录时出现“登录失败”

美好的一天,我正在尝试使用 imaplib 连接到交换服务器。下面是代码:

import imaplib

imap_host = 'example.smth.smth.kz'
mail_login = 'name.lastname@smth.kz'
mail_pass = '**********'


M = imaplib.IMAP4_SSL(imap_host)
print(M.welcome)
M.login(user1, imap_pass)
Run Code Online (Sandbox Code Playgroud)

M.Welcome 返回b'* OK Microsoft Exchange IMAP4 服务已准备就绪。,这意味着我能够连接到服务器。但是,当我尝试登录时出现此错误: imaplib.error: b'LOGIN failed' 尽管如此,凭据是正确的。这里有什么问题呢?

python imap imaplib

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