我正在尝试从Gmail帐户中获取可能包含一些大附件(大约30MB)的所有邮件.我只需要名字,而不是整个文件.我找到了一段代码来获取消息和附件的名称,但它会下载文件然后读取其名称:
import imaplib, email
#log in and select the inbox
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('username', 'password')
mail.select('inbox')
#get uids of all messages
result, data = mail.uid('search', None, 'ALL')
uids = data[0].split()
#read the lastest message
result, data = mail.uid('fetch', uids[-1], '(RFC822)')
m = email.message_from_string(data[0][1])
if m.get_content_maintype() == 'multipart': #multipart messages only
for part in m.walk():
#find the attachment part
if part.get_content_maintype() == 'multipart': continue
if part.get('Content-Disposition') is None: continue
#save the attachment in the program directory
filename = part.get_filename()
fp = …Run Code Online (Sandbox Code Playgroud) 我正在使用Google的Oauth 2.0来获取用户的access_token,但我不知道如何使用imaplib来访问收件箱.
我已经读过这个并编写了这个脚本来获取某些邮箱中的电子邮件正文,标题以'$'开头,并由一些发件人发送.
import email, getpass, imaplib, os
detach_dir = "F:\PYTHONPROJECTS" # where you will save attachments
user = raw_input("Enter your GMail username --> ")
pwd = getpass.getpass("Enter your password --> ")
# connect to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user, pwd)
m.select("PETROLEUM") # here you a can choose a mail box like INBOX instead
# use m.list() to get all the mailboxes
resp, items = m.search(None, '(FROM "EIA_eLists@eia.gov")')
items = items[0].split() # getting the mails id
my_msg …Run Code Online (Sandbox Code Playgroud) 我正在尝试搜索已发送的消息(实际上我关心两者),但我只收到传入的消息.暂时我有
imap_conn.select()
str_after = after.strftime('%d-%b-%Y')
typ, msg_ids = imap_conn.search('UTF-8','SINCE',str_after)
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果
imap_conn.select('INBOX')
Run Code Online (Sandbox Code Playgroud)
当我用ALL或SENT替换INBOX时,我得到:命令SEARCH在状态AUTH中是非法的,只允许在SELECTED状态下
我是python的新手,我试图通过python的imaplib和电子邮件解析来自gmail的电子邮件.它工作得很好,但我遇到了电子邮件附件的问题.
我想从电子邮件中解析出所有明文,同时忽略可能作为辅助内容类型插入的任何HTML,同时还删除并保存所有其他附件.我一直在尝试以下方面:
...imaplib connection and mailbox selection...
typ, msg_data = c.fetch(num, '(RFC822)')
email_body = msg_data[0][1]
mail = email.message_from_string(email_body)
for part in mail.walk():
if part.get_content_type() == 'text/plain':
body = body + '\n' + part.get_payload()
else:
continue
Run Code Online (Sandbox Code Playgroud)
这是我最初尝试只接收电子邮件的明文部分,但当有人发送带有文本附件的电子邮件时,文本文件的内容会显示上面的"body"变量.
有人能告诉我如何在忽略有时存在的辅助HTML的同时提取电子邮件的明文部分,同时还将所有其他类型的文件附件保存为文件?如果这没有多大意义,我会道歉.如果需要,我会更详细地更新问题.
我是Python的新手,并且已经完成了编写连接到我的Microsoft Outlook邮箱的程序,查看所有电子邮件以及主题是否有某个单词的任务,然后将保存电子邮件时间和主题的详细信息在变量中,以及电子邮件消息正文将被解析,相关信息将存储在变量中.然后,此信息将存储在外部服务器/数据库中.它还需要能够监控到我邮箱的任何新电子邮件,并重复检查主题行并采取适当措施的练习.
我之前使用Interop库在C#中编写了完全相同的程序,但现在需要在Python中执行此操作.我可以通过稍后阅读模块文档来了解细节,但从高层次的角度来看,我应该使用哪些模块.我一直在做我的研究,并且已经提到的一些模块包括电子邮件,procmail和imaplib,但是这里的Python老手对于我超越的项目推荐了什么?
提前感谢您提供的任何帮助!
我使用imaplib在python中使用imap,但看起来它没有办法解析IMAP响应的细节.例如,查询如下:
msgdata = connection.fetch(num, "(BODY.PEEK[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] UID)")
Run Code Online (Sandbox Code Playgroud)
num消息号在哪里,对于一个邮件服务器可能产生(例如):
('OK', [('1234 (BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ' UID 3456)'])
Run Code Online (Sandbox Code Playgroud)
另一个:
('OK', [('1234 (UID 3456 BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ')'])
Run Code Online (Sandbox Code Playgroud)
如您所见,消息详细信息不同,UID甚至在不同的元素中.所以问题是 - 是否有一些库可以自动对其进行排序并抽象出特定邮件服务器的功能细节?
我试图从电子邮件中获取附件并将其保存到具有原始文件名的特定文件夹.电子邮件是非常基本的,除了附件之外没有太多的东西.该文件是一个csv文件,每封电子邮件只有一个.这是我到目前为止所做的,但我是新手,我不知道如何继续.如果有帮助,这是使用Outlook.任何帮助表示赞赏.
import imaplib
import email
mail=imaplib.IMAP4('mailserver.com')
mail.login("username", "password")
mail.select("DetReport")
typ, msgs = mail.uid('Search', None, '(SUBJECT "Detection")')
msgs = msgs[0].split()
for emailid in msgs:
resp, data = mail.fetch(emailid, "(RFC822)")
email_body = data[0][1]
m = email.message_from_string(email_body)
message=m.get_content_maintype()
Run Code Online (Sandbox Code Playgroud)
仅供参考,当我运行时,message=m.get_content_maintype()它说它是文本.
我正在使用 Django 构建邮件客户端,并使用 imaplib 提取电子邮件。到目前为止,我可以在每个 imap 服务器中选择收件箱文件夹,因为它的名称是“收件箱”。但是在选择其他文件夹(如垃圾邮件、已发送和其他文件夹)时,我遇到了麻烦,因为它们的名称基于帐户语言。例如,我的帐户设置为俄语并列出如下邮件:
mail = imaplib.IMAP4_SSL(IMAP)
mail.login(USERNAME, PASSWORD)
for i in mail.list()[1]:
print(i)
Run Code Online (Sandbox Code Playgroud)
给我以下输出(utf-7):
b'(\\Inbox) "/" "INBOX"'
b'(\\Spam) "/" "&BCEEPwQwBDw-"'
b'(\\Sent) "/" "&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-"'
b'(\\Drafts) "/" "&BCcENQRABD0EPgQyBDgEOgQ4-"'
b'(\\Trash) "/" "&BBoEPgRABDcEOAQ9BDA-"'
Run Code Online (Sandbox Code Playgroud)
尽管帐户选择了语言,我如何选择文件夹?如果我使用:
mail.select("&BBoEPgRABDcEOAQ9BDA-")
Run Code Online (Sandbox Code Playgroud)
它有效,但我的邮件客户端像这样没用。
imaplib ×10
python ×10
gmail ×4
attachment ×2
email ×2
imap ×2
csv ×1
gmail-imap ×1
mapi ×1
oauth-2.0 ×1
outlook ×1
python-2.7 ×1
request ×1
win32com ×1