以管理员身份获取我的 Google 工作区用户的电子邮件

问题描述 投票:0回答:2

我目前正在尝试获取我的 Google 工作区用户的所有电子邮件(我有一个管理员帐户)!

我首先在控制台上执行这些步骤。

  1. 在 Google Cloud Platform (GCP) 控制台中创建项目。

  2. 进入“API 和服务”->“库”,为您的项目激活 Gmail API,搜索“Gmail”并激活 API。

  3. 创建API访问凭证。为此,请转到“API 和服务”->“凭据”,然后单击“创建凭据”并选择“服务帐户”。按照步骤创建服务帐户。

  4. 创建服务帐户后,您将看到一个包含密钥的 JSON 文件。请妥善保管该文件。您将在应用程序中使用它来对 API 进行身份验证。

  5. 为您的服务帐户配置域委派。为此,请转到“IAM 和管理”->“服务帐户”,单击您创建的服务帐户,然后单击“添加密钥”并选择“JSON”。下载 JSON 文件。

  6. 转至您的 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

python google-cloud-platform gmail-api google-workspace google-api-python-client
2个回答
0
投票

您需要委托给您域中的用户

credentials = ServiceAccountCredentials.from_json_keyfile_name(
    SERVICE_ACCOUNT_FILE_PATH,
    scopes=SCOPES)

credentials = credentials.create_delegated(user_email)

0
投票

我使用了这段代码(由 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()
© www.soinside.com 2019 - 2024. All rights reserved.