googleapi: Fehler 400: Empfängeradresse erforderlich, invalidArgument

Oct 08 2020

Ich führe folgendes Skript aus, um eine E-Mail-Nachricht zu senden. Die Von- und Bis-Adressen werden durch Sender und Empfänger ersetzt.

func SendMail() {

b, err := ioutil.ReadFile("credentials.json")
if err != nil {
    log.Fatalf("Unable to read client secret file: %v", err)
}

config, err := google.ConfigFromJSON(b, gmail.MailGoogleComScope)
if err != nil {
    log.Fatalf("Unable to parse client secret file to config: %v", 
err)
}
client := getClient(config)

srv, err := gmail.New(client)
if err != nil {
    log.Fatalf("Unable to retrieve Gmail client: %v", err)
}

user := "me"
mailtext := `From: [email protected]
To: [email protected]
Subject: Saying Hello
Date: Thu, 8 Oct 2020 09:55:06 -0600
Message-ID: <[email protected]>

This is a message just to say hello.
So, "Hello".
`
raw := base64.URLEncoding.EncodeToString([]byte(mailtext))

var message gmail.Message
message.Id = "Msg 2"
message.LabelIds = []string{"SENT"}
message.Raw = raw

doFunc := srv.Users.Messages.Send(user, &message)
m, err := doFunc.Do()
if err != nil {
    println(err.Error())
    println("Message not sent")
} else {
    fmt.Printf("%+v", m)
}

Das Skript meldet den folgenden Fehler:

googleapi: Error 400: Recipient address required, invalidArgument

Umgebung: macOS Catalina 10.15.7 go1.15.2 darwin / amd64

Danke für die Hilfe!!!

Antworten

1 Tanaike Oct 09 2020 at 03:29

Ich glaube Ihr Ziel wie folgt.

  • Sie möchten eine E-Mail mit googleapis für golang senden.
  • Sie konnten E-Mails bereits über die Google Mail-API abrufen und ablegen.

Änderungspunkte:

  • In Ihrem Skript muss das meiner Meinung mailtextnach geändert werden. In diesem Fall sind der Zeilenumbruch und die Leerzeichen wichtig.
  • Obwohl rawerstellt, wird dies nicht in den Anforderungshauptteil gestellt.

Wenn die oben genannten Punkte in Ihrem Skript wiedergegeben werden, sieht es wie folgt aus.

Geändertes Skript:

Von:
    mailtext := `
    From: [email protected]
    To: [email protected]
    Subject: Saying Hello
    Date: Thu, 8 Oct 2020 09:55:06 -0600
    Message-ID: <[email protected]>

    This is a message just to say hello.
    So, "Hello".
    `
    raw :=  base64.URLEncoding.EncodeToString([]byte(mailtext))

     // create gmail.Message

     var message gmail.Message
     message.Id = "Msg 1"
     message.LabelIds = []string{"SENT"}
Zu:
    user := "me"
    // Modified
    mailtext := `From: [email protected]
To: [email protected]
Subject: Saying Hello
Date: Thu, 8 Oct 2020 09:55:06 -0600
Message-ID: <[email protected]>

This is a message just to say hello.
So, "Hello".`
    raw := base64.URLEncoding.EncodeToString([]byte(mailtext))

    // create gmail.Message

    var message gmail.Message
    message.Id = "Msg 1"
    message.LabelIds = []string{"SENT"}
    message.Raw = raw  // Added
  • Ich denke das in diesem Fall Date:und Message-ID:könnte durch neue Werte ersetzt werden.

  • Oder ändern Sie bitte mailtextwie folgt.

      mailtext := "From: [email protected]\nTo: [email protected]\nSubject: Saying Hello\nDate: Thu, 8 Oct 2020 09:55:06 -0600\nMessage-ID: <[email protected]>\n\nThis is a message just to say hello.\nSo, \"Hello\"."
    

Referenz:

  • Methode: users.messages.send