Zum Inhalt springen

Gmail

Über die Gmail API liest RUNOS Mails aus einem Google-Konto, ohne Mailprogramm: ungelesene Mails suchen, ihre Details abrufen und sie als gelesen markieren. Zum Senden über Gmail nehmen Sie die Aktion SMTP.

Google verlangt eine eigene OAuth-Anwendung:

  1. Legen Sie in der Google Cloud Console ein Projekt an und aktivieren Sie die Gmail API.
  2. Richten Sie den OAuth-Zustimmungsbildschirm ein und tragen Sie Ihr Google-Konto als Testnutzer ein.
  3. Legen Sie unter Anmeldedaten eine OAuth-Client-ID vom Typ Desktop-App an. Notieren Sie Client-ID und Clientschlüssel.
  4. In RUNOS: Konnektoren → Neu → Vorlage Gmail API. Nennen Sie den Konnektor Gmail, tragen Sie Client ID und Client secret ein und speichern Sie.
  5. Im Browser anmelden und den Zugriff bestätigen.

Die Vorlage fordert die Berechtigungen gmail.send und gmail.readonly an. Zum Markieren als gelesen ergänzen Sie in den Scopes https://www.googleapis.com/auth/gmail.modify und melden sich erneut an. Mehr unter OAuth2.

{
"Type": "HttpRequest",
"Name": "Ungelesen",
"Parameters": {
"Url": "https://gmail.googleapis.com/gmail/v1/users/me/messages",
"Connector": "Gmail",
"QueryParameters": { "q": "is:unread has:attachment", "maxResults": "20" }
}
}

q versteht dieselben Suchbegriffe wie das Suchfeld von Gmail. Die Antwort enthält in Body.messages eine Liste mit id je Mail. Die Details lesen Sie je Mail in einer Loop:

{
"Type": "Loop",
"Name": "JedeMail",
"Parameters": {
"Items": "{{Ungelesen.Response.Body.messages}}",
"Do": [
{
"Type": "HttpRequest",
"Name": "MailLesen",
"Parameters": {
"Url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{{item.id}}",
"Connector": "Gmail",
"QueryParameters": { "format": "metadata", "metadataHeaders": "Subject" }
}
}
]
}
}

Im Durchlauf steht die Kurzvorschau in {{MailLesen.Response.Body.snippet}}. Prüfen Sie vorher mit IF, ob es überhaupt Mails gibt: {{Ungelesen.Response.Body.resultSizeEstimate}} > 0.

Im selben Durchlauf entfernt diese Aktion das Label UNREAD, damit die Mail beim nächsten Abruf nicht wieder erscheint (Scope gmail.modify nötig):

{
"Type": "HttpRequest",
"Name": "AlsGelesen",
"Parameters": {
"Url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{{item.id}}/modify",
"Method": "POST",
"Connector": "Gmail",
"Body": { "removeLabelIds": [ "UNREAD" ] }
}
}

Mit einem Time-Trigger (z. B. alle 5 Minuten) wird daraus ein Postfach, das RUNOS regelmäßig abarbeitet.

Die Gmail API erwartet zum Senden den vollständigen Mailtext als Base64. Das lässt sich mit HttpRequest derzeit nicht aus Platzhaltern zusammensetzen. Senden Sie über Gmail deshalb mit der Aktion SMTP:

  1. Schalten Sie im Google-Konto die Bestätigung in zwei Schritten ein und erzeugen Sie unter Sicherheit → App-Passwörter ein App-Passwort.
  2. Legen Sie einen Basic-Konnektor GmailSmtp an: Benutzername = Gmail-Adresse, Passwort = App-Passwort.
{
"Type": "SMTP",
"Name": "GmailSenden",
"Parameters": {
"SmtpServer": "smtp.gmail.com",
"SmtpPort": 587,
"UseSsl": true,
"SmtpUser": "{{connector.GmailSmtp.Username}}",
"SmtpPassword": "{{connector.GmailSmtp.Password}}",
"From": "{{connector.GmailSmtp.Username}}",
"To": "kunde@example.com",
"Subject": "Ihr Auftrag {{InitialData.Auftrag}}",
"Body": "Guten Tag,\n\nIhr Auftrag ist eingegangen.",
"Attachments": "{{FilePath}}"
}
}

Gmail legt die Mail selbst im Ordner Gesendet ab.