def getbodyinbox():
    service = build('gmail', 'v1', credentials=creds)
    label_name = "READ-BY-SCRIPT"
    label_id = 'Label_8507504117657095973'
    results = service.users().messages().list(
        userId='me', q="-label:"+label_name, maxResults=1).execute()
    messages = results.get('messages', [])
    body = []
    if not messages:
        body = "no messages"
        return body
    else:
        for message in messages:
            msg = service.users().messages().get(
                userId='me', id=message['id']).execute()
            labels = msg['labelIds']
            if "INBOX" in labels:
                headers = msg['payload']['headers']
                headers = str(headers)
                print(headers)
                if "class_ix" in headers:
                    body.append(msg['payload']['parts'])
                    if 'data' in body[0][0]['body']:
                        body = base64.urlsafe_b64decode(
                            body[0][0]['body']['data'])
                    elif 'data' in body[0][1]['body']:
                        body = base64.urlsafe_b64decode(
                            body[0][1]['body']['data'])
                    body = str(body)

                        
                    return body


print(getbodyinbox())

Este es mi código hasta ahora con la parte que obtiene las credenciales y todas las importaciones eliminadas. Obtiene el cuerpo del correo electrónico más reciente sin una etiqueta 'READ-BY-SCRIPT' que también tiene la etiqueta INBOX. ¿Cómo puedo obtener el asunto del correo electrónico en lugar del cuerpo?

1
Ori 22 ene. 2021 a las 13:23

1 respuesta

La mejor respuesta

Eche un vistazo al recurso de mensajes, MessagePart y encabezado

La estructura es la siguiente:

  "payload": {
    "partId": string,
    "mimeType": string,
    "filename": string,
    "headers": [
      {
        "name": string,
        "value": string
      }
    ],

Y:

enter image description here

Entonces, en otras palabras, el tema está contenido en los encabezados.

Puede recuperar en Python con

headers = msg['payload']['headers']
subject= [i['value'] for i in headers if i["name"]=="Subject"]
1
ziganotschka 22 ene. 2021 a las 10:50