如何阅读Gmail的电子邮件? 我正在尝试将我的gmail连接到python,但要告诉我这个错误: 我已经检查了我的密码,知道什么吗? b'[authenticationfailed]无效的凭据(失败)' 追溯(大多数恢复...

问题描述 投票:0回答:5
b'[AUTHENTICATIONFAILED] Invalid credentials (Failure)' Traceback (most recent call last): File "/Users/myuser/Documents/migrations/untitled3.py", line 29, in read_email_from_gmail mail.login(FROM_EMAIL,FROM_PWD) File "/Users/myuser/opt/anaconda3/lib/python3.9/imaplib.py", line 612, in login raise self.error(dat[-1]) imaplib.IMAP4.error: b'[AUTHENTICATIONFAILED] Invalid credentials (Failure)'

在这里我的代码: 我也想知道我可以使用哪个端口?

import smtplib import time import imaplib import email import traceback ORG_EMAIL = "@gmail.com" FROM_EMAIL = "myemail" + ORG_EMAIL FROM_PWD = "mypassword" SMTP_SERVER = "smtp.gmail.com" SMTP_PORT = ?? def read_email_from_gmail(): try: mail = imaplib.IMAP4_SSL(SMTP_SERVER) mail.login(FROM_EMAIL,FROM_PWD) mail.select('inbox') data = mail.search(None, 'ALL') mail_ids = data[1] id_list = mail_ids[0].split() first_email_id = int(id_list[0]) latest_email_id = int(id_list[-1]) for i in range(latest_email_id,first_email_id, -1): data = mail.fetch(str(i), '(RFC822)' ) for response_part in data: arr = response_part[0] if isinstance(arr, tuple): msg = email.message_from_string(str(arr[1],'utf-8')) email_subject = msg['subject'] email_from = msg['from'] print('From : ' + email_from + '\n') print('Subject : ' + email_subject + '\n') except Exception as e: traceback.print_exc() print(str(e)) read_email_from_gmail()

我的主要目标是能够从每个电子邮件中获取CSV文件,但是现在我只想阅读消息。
    

读取电子邮件的最佳方法是使用Gmail API。 Google已停止使用用户名和密码通过2022年5月30日的任何外部应用程序访问Gmail帐户。 因此,这就是您从Python阅读Gmail的方式。
此应用程序是什么:

阅读Gmail消息(未读)
python email gmail
5个回答
25
投票
在阅读消息

后将消息作为读取

import os.path import base64 from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build SCOPES = ['https://www.googleapis.com/auth/gmail.readonly','https://www.googleapis.com/auth/gmail.modify'] def readEmails(): """Shows basic usage of the Gmail API. Lists the user's Gmail labels. """ creds = None # The file token.json stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( # your creds file here. Please create json file as here https://cloud.google.com/docs/authentication/getting-started 'my_cred_file.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.json', 'w') as token: token.write(creds.to_json()) try: # Call the Gmail API service = build('gmail', 'v1', credentials=creds) results = service.users().messages().list(userId='me', labelIds=['INBOX'], q="is:unread").execute() messages = results.get('messages',[]); if not messages: print('No new messages.') else: message_count = 0 for message in messages: msg = service.users().messages().get(userId='me', id=message['id']).execute() email_data = msg['payload']['headers'] for values in email_data: name = values['name'] if name == 'From': from_name= values['value'] for part in msg['payload']['parts']: try: data = part['body']["data"] byte_code = base64.urlsafe_b64decode(data) text = byte_code.decode("utf-8") print ("This is the message: "+ str(text)) # mark the message as read (optional) msg = service.users().messages().modify(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute() except BaseException as error: pass except Exception as error: print(f'An error occurred: {error}')

    您需要在Google帐户中创建凭据文件 如何在此处创建凭证文件
  • Https://cloud.google.com/docs/authentication/getting-started
当问题
,Gmail有一个新的政治人物,他不允许使用不安全的应用程序。

为了帮助确保您的帐户安全,从2022年5月30日开始,Google不再支持使用第三方应用程序或设备,这些应用程序要求您仅使用用户名和密码登录Google帐户。


5
投票
如果您要以这种方式检查它,则您需要在Gmail帐户中启用

''ElessSecureApps'。因此,最好使用gmailapi

SMTP端口未设置 - 确保您使用正确的端口
(993)


1
投票
SYNC多个电子邮件服务器

撰写了一个用Google Mail测试的申请。仍然如上所述,建议使用

Google API

。在我的github帐户上,我有一个示例申请,用于使用机器Learning的Google API和anding电子邮件,如果对您来说很有趣。


1
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.