PythongMail Api integreren met behulp van een serviceaccount om bijvoorbeeld Oauth op te halen
In het verleden heb ik een blogpost gemaakt over de integratie van Google Sheets API met Katalon Studio via een serviceaccount.
Je kunt dit ook doen in python:
Serviceaccount instellen en inloggegevens downloaden
- Ga naar de Google Cloud Console.
- Maak een nieuw project of selecteer een bestaand project.
- Navigeer naar IAM & Admin > Serviceaccounts en klik op „Serviceaccount aanmaken”.
- Vul de nodige informatie in en klik op „Aanmaken”.
- Verleen het serviceaccount de nodige machtigingen (voor Gmail API: Gmail API > Gmail API-gebruiker).
- Klik op „Doorgaan” en vervolgens op „Gereed”.
- Klik op het nieuw aangemaakte serviceaccount om de details ervan te bekijken.
- Klik op het tabblad Keys op „Sleutel toevoegen” en selecteer „JSON”. Hiermee wordt een JSON-sleutelbestand gedownload. Bewaar dit bestand veilig.
- Deel de mailbox met het serviceaccount door naar je Gmail-instellingen > Accounts en importeren > Toegang verlenen tot je account te gaan.
- Installeer de benodigde bibliotheken Je hebt de google-auth- en google-api-python-client-bibliotheken nodig. Je kunt ze installeren via pip:
pip install --upgrade google-auth google-autho-authlib google-auth-httplib2 google-api-python-client
import google.auth
from google.oauth2 import service_account
from googleapiclient.discovery import build
import base64
# Load the credentials
SERVICE_ACCOUNT_FILE = 'path_to_service_account.json'
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
# The email ID for the user you're trying to impersonate.
user_email = 'your_email@gmail.com'
delegated_credentials = credentials.with_subject(user_email)
# Build the Gmail API client
service = build('gmail', 'v1', credentials=delegated_credentials)
# Define your query
query = "from:example@example.com subject:'Important'"
# Filter messages based on the query
results = service.users().messages().list(userId='me', q=query, maxResults=10).execute()
messages = results.get('messages', [])
for message in messages:
msg = service.users().messages().get(userId='me', id=message['id']).execute()
# Get the message body
msg_body = base64.urlsafe_b64decode(msg['payload']['body']['data']).
decode('utf-8').print(msg_body)
Dingen om te updaten
Vervang path_to_service_account.json door het pad naar het JSON-bestand van uw serviceaccount en your_email@gmail.com door het e-mailadres waarvan u de berichten wilt lezen.
Vervang de waarde van de queryvariabele door de gewenste filtervoorwaarde. In het bovenstaande voorbeeld filtert het berichten van example@example.com met een onderwerp dat het woord „Belangrijk” bevat. De parameter q ondersteunt verschillende zoekcombinaties, net als het zoekvak van Gmail. Enkele voorbeelden zijn:
Als je berichten in Gmail programmatisch wilt filteren met behulp van de Gmail API en Python, kun je de parameter q gebruiken in de lijstmethode van de Gmail API. De parameter q ondersteunt hetzelfde queryformaat dat je gebruikt in het zoekvak van Gmail.