googleapi: ошибка 400: требуется адрес получателя, invalidArgument
Oct 08 2020
Я запускаю следующий сценарий для отправки сообщения электронной почты. Адреса отправителя и получателя заменяются на отправителя и получателя.
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)
}
Сценарий сообщает об ошибке:
googleapi: Error 400: Recipient address required, invalidArgument
Среда: macOS Catalina 10.15.7 go1.15.2 darwin / amd64
Спасибо за помощь!!!
Ответы
1 Tanaike Oct 09 2020 at 03:29
Я считаю вашей целью следующее.
- Вы хотите отправить электронное письмо с помощью googleapis для golang.
- Вы уже могли получать и отправлять электронные письма с помощью Gmail API.
Пункты модификации:
- Я думаю, что в вашем сценарии
mailtextэто необходимо изменить. В этом случае важны разрыв строки и пробелы. - Хотя
rawсоздается, но не помещается в тело запроса.
Когда вышеуказанные пункты отражаются в вашем скрипте, он становится следующим.
Измененный скрипт:
Из: 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"}
Кому:
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
Думаю, что в этом случае
Date:иMessage-ID:могут быть заменены новые значения.Или внесите
mailtextследующие изменения .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\"."
Справка:
- Метод: users.messages.send