我目前正在尝试获取我的 Google 工作区用户的所有电子邮件(我有一个管理员帐户)!
我首先在控制台上执行这些步骤。
在 Google Cloud Platform (GCP) 控制台中创建项目。
进入“API 和服务”->“库”,为您的项目激活 Gmail API,搜索“Gmail”并激活 API。
创建API访问凭证。为此,请转到“API 和服务”->“凭据”,然后单击“创建凭据”并选择“服务帐户”。按照步骤创建服务帐户。
创建服务帐户后,您将看到一个包含密钥的 JSON 文件。请妥善保管该文件。您将在应用程序中使用它来对 API 进行身份验证。
为您的服务帐户配置域委派。为此,请转到“IAM 和管理”->“服务帐户”,单击您创建的服务帐户,然后单击“添加密钥”并选择“JSON”。下载 JSON 文件。
转至您的 Google Workspace 管理控制台:admin.google.com。单击“安全”->“API 控制”,然后在“域范围委派”部分中,单击“管理域范围委派”。单击“添加新”,然后输入服务帐户的客户端 ID(您可以在步骤 5 中下载的 JSON 文件中找到该 ID)并输入您要委托的范围(例如,“https://www. googleapis.com/auth/gmail.readonly”)。点击“授权”。
然后我添加了这段代码
from gmail_connector.mixins.email_scraper import Extract
from gmail_connector.mixins.check import Check
from gmail_connector.logging import Logger
from googleapiclient.discovery import build
from google.oauth2 import service_account
import json
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
SUBJECT = 'me'
with open("C:/Python310/mailchecking01-d253ce85770d.json") as f:
service_account_info = json.load(f)
print(service_account_info)
# Création des credentials
creds = service_account.Credentials.from_service_account_file("C:/Python310/mailchecking01-d253ce85770d.json", scopes=SCOPES)
print(creds)
# Construction du service
service = build('gmail', 'v1', credentials=creds)
try:
results = service.users().messages().list(userId='me').execute()
print('Retrieved email list successfully. The list is:')
print(results)
except Exception as e:
print('Failed to retrieve email list. The error message is:')
print(e)
此代码给了我我的凭据!但他也向我展示了: 检索电子邮件列表失败。错误信息是:
https://gmail.googleapis.com/gmail/v1/users/me/profile?alt=json
您需要委托给您域中的用户
credentials = ServiceAccountCredentials.from_json_keyfile_name(
SERVICE_ACCOUNT_FILE_PATH,
scopes=SCOPES)
credentials = credentials.create_delegated(user_email)
我使用了这段代码(由 ChatGPT 提供),它有效。它列出了给定邮件地址的最新 10 封邮件。
from google.oauth2 import service_account
from googleapiclient.discovery import build
import base64
import email
# Configuration
SERVICE_ACCOUNT_FILE = 'xyz.json'
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
USER_EMAIL = '[email protected]' # Email of the user you want to impersonate
def get_gmail_service():
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
delegated_credentials = credentials.with_subject(USER_EMAIL)
service = build('gmail', 'v1', credentials=delegated_credentials)
return service
def list_messages(service, user_id):
# List the first 10 messages
results = service.users().messages().list(userId=user_id, maxResults=10).execute()
return results.get('messages', [])
def get_message(service, user_id, msg_id):
# Get a specific message
message = service.users().messages().get(userId=user_id, id=msg_id, format='raw').execute()
msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
mime_msg = email.message_from_bytes(msg_str)
return mime_msg
def main():
service = get_gmail_service()
messages = list_messages(service, USER_EMAIL)
for message in messages:
msg = get_message(service, USER_EMAIL, message['id'])
print(f"Subject: {msg['subject']}")
print(f"From: {msg['from']}")
print("")
if __name__ == '__main__':
main()