执行响应下面显示的代码后,我收到以下响应.如何通过此响应来解析发送者(John Smith)和主题(测试)?
[('13010 (BODY[HEADER.FIELDS (SUBJECT FROM)] {57}', 'From: John Smith <jsmith@gmail.com>\r\nSubject: test\r\n\r\n'), ')']
Run Code Online (Sandbox Code Playgroud)
-
conn.fetch(message, '(BODY[HEADER.FIELDS (SUBJECT FROM)])')
Run Code Online (Sandbox Code Playgroud) 我正在使用带有Python的imaplib来获取我的收件箱或GMail标签的内容.
我的问题是:当我查询收件箱时,imaplib返回UID,但不是我的电子邮件标签.
如果我查询收件箱,我会得到UID:
inbox EMAIL_UIDS: 24408 24599 25193 25224 25237 25406 25411 25412 25413 25415
Run Code Online (Sandbox Code Playgroud)
但是如果我查询我的标签"New"(其中包含收件箱中的两条消息,因此应该包含上述两个UID),我只得到有序的索引:
New EMAIL_UIDS: 1 2
Run Code Online (Sandbox Code Playgroud)
我的代码是:
#Main file
if folder_name is None:
email_uids = obtain_inbox_email_uids(mail)
else:
email_uids = obtain_folder_email_uids(folder_name,mail)
email_uids = list(email_uids)
Run Code Online (Sandbox Code Playgroud)
和:
#Email utilities file
def obtain_folder_email_uids(folder_name, mail):
"""
Given an IMAP instance,
return the UIDs of the emails in a specific folder.
"""
mail.select(folder_name)
result, data = mail.uid('search', None, "ALL")
print "RESULT, DATA",result,data
email_uids = data[0]
print folder_name,"EMAIL_UIDS:",email_uids
email_uids = email_uids.split(" ")
email_uids …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用python连接到我的Gmail帐户.imap已启用.
import imaplib
imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993)
# also tried imap_server = imaplib.IMAP4_SSL("imap.gmail.com"), doesnt work.
Run Code Online (Sandbox Code Playgroud)
回溯是:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 1202, in __init__
IMAP4.__init__(self, host, port)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 172, in __init__
self.open(host, port)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 1217, in open
IMAP4.open(self, host, port)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 248, in open
self.sock = self._create_socket()
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 1205, in _create_socket
sock = IMAP4._create_socket(self)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py", line 238, in …Run Code Online (Sandbox Code Playgroud) 嗨,我想知道是否有人可以帮助我在Gmail中提取我的电子邮件标题.我有这个代码:
import imaplib
M = imaplib.IMAP4('imap.gmail.com')
M.login('myusername', 'mypassword')
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
M.close()
M.logout()
Run Code Online (Sandbox Code Playgroud)
但是,我只想拉出每封电子邮件的标题,而不是正文?任何人都可以解答我,因为我不知道?
这是我的代码:
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]
parser = HeaderParser()
msg = parser.parsestr(header_data)
Run Code Online (Sandbox Code Playgroud)
从这里我得到错误信息:
TypeError: initial_value must be str or none, not bytes
Run Code Online (Sandbox Code Playgroud)
我使用python 3显然自动解码.那么为什么我仍然收到此错误消息?
在这里,我使用imapblib和email来根据特定条件(即发件人和主题)检索特定电子邮件。
import imaplib
import email
FROM_EMAIL = "##########@gmail.com"
FROM_PWD = "##########"
SMTP_SERVER = "imap.gmail.com"
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select("INBOX")
result, data2 = mail.search(None,'(FROM "####" SUBJECT "####")')
ids = data2[0]
id_list = ids.split()
latest_email_id = id_list[-1]
result, email_data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = email_data[0][1]
raw_email_string = raw_email.decode('utf-8')
email_message = email.message_from_string(raw_email_string)
Run Code Online (Sandbox Code Playgroud)
在电子邮件中,在我的桌面上使用 gmail,有一个如下所示的链接(请注意,# 字符代表敏感信息):
# This is how the link is supposed to appear
https://inreach.garmin.com/textmessage/txtmsg?extId=e3e7d4c2-fab4-43ad-93de-f9dedca8280#####=##########%40gmail.com
Run Code Online (Sandbox Code Playgroud)
当打印 python 检索到的电子邮件文本时,我得到了这个错误的链接:
email_text = list(email_message.walk())[1].get_payload()
print(email_text) # Note(I am not printing the …Run Code Online (Sandbox Code Playgroud) 我有一个 Python 脚本,它每隔几秒循环检查一次我的电子邮件中是否有新电子邮件while。
我通过imaplib以下方式使用该库连接到我的电子邮件服务器(以下代码位于循环顶部while):
import imaplib
mail = imaplib.IMAP4_SSL(IMAPSERVER)
mail.login(userName, password)
mail.select(theFolderName, True)
return_code, mail_ids = mail.search(None, 'UnSeen')
Run Code Online (Sandbox Code Playgroud)
有人能告诉我以下语句实际上是做什么的吗?
mail.close()
mail.logout()
Run Code Online (Sandbox Code Playgroud)
根据文件,他们分别:
“关闭当前选择的邮箱”
和
“关闭与服务器的连接;返回服务器再见响应。”
但是,“关闭”邮箱和“关闭”连接是什么意思?我的意思是,这些行动的意义或好处是什么?您能否提供一个例子来说明这些陈述实际上是必要的?
我问这个问题是因为我注意到无论添加还是删除这两行,我的脚本中绝对没有任何区别。所以,我想更好地了解他们的目的。
我需要使用 oauth2 和 imap 来连接 Gmail,我可以从https://github.com/simplegeo/python-oauth2看到代码:
import oauth2 as oauth
import oauth2.clients.imap as imaplib
# Set up your Consumer and Token as per usual. Just like any other
# three-legged OAuth request.
consumer = oauth.Consumer('your_consumer_key', 'your_consumer_secret')
token = oauth.Token('your_users_3_legged_token', 'your_users_3_legged_token_secret')
# Setup the URL according to Google's XOAUTH implementation. Be sure
# to replace the email here with the appropriate email address that
# you wish to access.
url = "https://mail.google.com/mail/b/your_users_email@gmail.com/imap/"
conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4
# This …Run Code Online (Sandbox Code Playgroud) 我想在许多进程中重用 imaplib.IMAP4_SSL 实例,这样我就不必多次登录。这是一些代码:
import imaplib
from multiprocessing import Process
def fetch(mail_client):
mail_client.uid('fetch', b'1', 'BODY[TEXT]')
def main():
c = imaplib.IMAP4_SSL('imap.gmail.com')
c.login(user='**', password='***')
c.select('inbox')
procs = [Process(target=fetch, args=(c,)) for _ in range(100)]
for p in procs:
p.start()
for p in procs:
p.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
但我收到与套接字相关的错误:
imaplib.IMAP4.abort:套接字错误:[Errno 32] 管道损坏
我认为这是因为进程正在写入 imaplib.IMAP4_SSL 所具有的同一个套接字,所以我尝试添加 multiprocessing.Lock 以防止同时访问:
import imaplib
from multiprocessing import Process, Lock
def fetch(mail_client, lock):
with lock:
mail_client.uid('fetch', b'1', 'BODY[TEXT]')
def main():
c = imaplib.IMAP4_SSL('imap.gmail.com')
c.login(user='engineering@epallet.com', password='Qwe=1dSAzxc+%')
c.select('inbox')
lock = Lock() …Run Code Online (Sandbox Code Playgroud) 如果有人可以帮助我解决这个问题,我将非常感激。
我已经实现了以下代码来读取“gmail 收件箱中的未读电子邮件”。我需要打印“收件人”、“发件人”、“主题”、“正文”和“将附件保存在指定位置”
我这里有两个问题。
Body: [<email.message.Message object at 0x026D1050>, <email.message.Message object at 0x02776B70>]。它将打印所有必需的内容并保存附件,但不打印正文。如果不包含附件,则效果很好。
示例:Python 打印为 Python=C2=A0i=,有时不同的样式用“*”分隔。
def get_body(email_message):
for payload in email_message.get_payload():
# print('Body:\t', payload.get_payload())
break
return(payload.get_payload())
def read_email(server,uname,pwd):
username = uname
password = pwd
mail = imaplib.IMAP4_SSL(server)
mail.login(username, password)
mail.select("inbox")
try:
result, data = mail.uid('search', None, '(UNSEEN)')
inbox_item_list = data[0].split()
most_recent = inbox_item_list[-1]
result2, email_data = mail.uid('fetch', most_recent, '(RFC822)')
raw_email = email_data[0][1].decode("UTF-8")
email_message = email.message_from_string(raw_email)
for part in email_message.walk():
if part.get_content_maintype() == 'multipart':
continue …Run Code Online (Sandbox Code Playgroud) imaplib ×10
python ×9
email ×2
gmail ×2
imap ×2
python-3.x ×2
gmail-imap ×1
google-oauth ×1
oauth-2.0 ×1
sockets ×1