如何从gmail python接收电子邮件?

如何从gmail python接收电子邮件?,python,email,gmail,poplib,Python,Email,Gmail,Poplib,我想用python获取最近10次收到的Gmail 目前我有这个代码,但它只返回有限数量的电子邮件,它直接操纵pop3,这使得它不必要的长 代码来源: 这对我来说也不管用 import poplib from email import parser pop_conn = poplib.POP3_SSL('pop.gmail.com') pop_conn.user('@gmail.com') pop_conn.pass_('password') messages = [pop_conn.retr(

我想用python获取最近10次收到的Gmail

目前我有这个代码,但它只返回有限数量的电子邮件,它直接操纵pop3,这使得它不必要的长

代码来源:

这对我来说也不管用

import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('@gmail.com')
pop_conn.pass_('password')

messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print(message['subject'])
    print(message['body'])
您应该尝试获取电子邮件列表,我不确定它是否适用于pop3

代码示例:

import easyimap

host = 'imap.gmail.com'
user = 'you@example.com'
password = 'secret'
mailbox = 'INBOX.subfolder'
imapper = easyimap.connect(host, user, password, mailbox)

email_quantity = 10
emails_from_your_mailbox = imapper.listids(limit=email_quantity)
imapper.quit()

我设法解决了它,唯一的问题是它会将每封未读的电子邮件标记为已读

是首选的方式:

从gmail.gmail导入gmail_auth,ListThreadsMachingQuery 服务=gmail\u身份验证 threads=ListThreadsMatchingQueryservice,query=query 其中:

def ListThreadsMatchingQueryservice,用户_id='me',查询=: 列出与查询匹配的用户邮箱的所有线程。 Args: 服务:授权的Gmail API服务实例。 用户id:用户的电子邮件地址。我的特殊价值 可用于指示经过身份验证的用户。 查询:用于筛选返回消息的字符串。 例如-“标签:未读”仅适用于未读邮件。 返回: 与查询条件匹配的线程列表。请注意,返回的 列表包含线程ID,必须使用get和相应的 ID以获取线程的详细信息。 尝试: response=service.users.threads.listuserId=user\u id,q=query.execute 线程=[] 如果响应为“线程”: threads.extendresponse['threads'] 响应“nextPageToken”时: page_token=响应['nextPageToken'] response=service.users.threads.listuserId=user\u id,q=query, pageToken=page_token.execute threads.extendresponse['threads'] 返回线程 除了errors.HttpError作为错误: 提出错误
如果你想要gmail的电子邮件,你可能想使用api:你能帮我吗?代码给了我一个错误:异常:超时,当我更改imapper=easyimap.connecthost的imapper=easyimap.connecthost、用户、密码、邮箱、ssl=Fals e、port=143时,它显示:imaplib.abort:socket error:EOF。两个建议:1使用异步IO创建异步连接,例如包装imapper。你可以查一下这个
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('@gmail.com')
pop_conn.pass_('password')

messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print(message['subject'])
    print(message['body'])
import easyimap

host = 'imap.gmail.com'
user = 'you@example.com'
password = 'secret'
mailbox = 'INBOX.subfolder'
imapper = easyimap.connect(host, user, password, mailbox)

email_quantity = 10
emails_from_your_mailbox = imapper.listids(limit=email_quantity)
imapper.quit()
import imaplib

mail = imaplib.IMAP4_SSL('imap.gmail.com')
email = input('Email: ')
password = input('Password: ')
mail.login(email+'@gmail.com', password)
mail.list()
# Out: list of "folders" aka labels in gmail.
mail.select("inbox") # connect to inbox.
result, data = mail.search(None, "ALL")

ids = data[0] # data is a list.
id_list = ids.split() # ids is a space separated string
latest_email_id = id_list[-1] # get the latest

# fetch the email body (RFC822) for the given ID
result, data = mail.fetch(latest_email_id, "(RFC822)") 

raw_email = data[0][1] # here's the body, which is raw text of the whole email
# including headers and alternate payloads

import email
email_message = email.message_from_string(str(raw_email))
 
print (email_message['To'])
 
print (email.utils.parseaddr(email_message['From'])) # for parsing "Yuji Tomita" <yuji@grovemade.com>
 
print (email_message.items()) # print all headers
 
# note that if you want to get text content (body) and the email contains
# multiple payloads (plaintext/ html), you must parse each message separately.
# use something like the following: (taken from a stackoverflow post)
def get_first_text_block(self, 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()