【发布时间】:2020-10-10 19:26:15
【问题描述】:
我正在运行以下脚本来发送电子邮件。 From 和 To 地址被发送者和接收者替换。
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: sender@gmail.com
To: receiver@gmail.com
Subject: Saying Hello
Date: Thu, 8 Oct 2020 09:55:06 -0600
Message-ID: <1234@local.machine.example>
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
谢谢你的帮助!!!
【问题讨论】:
-
我必须为我糟糕的英语水平道歉。不幸的是,从您的脚本中,我无法理解您的目标。您想发送现有的草稿消息吗?或者您想通过更新草稿消息来发送现有草稿消息?或者您想创建一个草稿消息并发送它?或者您只想发送一封电子邮件?
-
我只想撰写新邮件并发送。我修改了代码并删除了草稿消息,只是创建了一条消息并尝试发送它。现在我看到收件人地址需要错误。
-
感谢您的回复。从您的回复和更新脚本中,我提出了一个修改后的脚本作为答案。你能确认一下吗?
-
您是否尝试过使用 Gmail API 浏览器发送邮件?它应该显示相同的错误,也许更详细一点。
-
我的系统上有 credentials.json 和 access.json。我可以在 go 中创建一个发布请求并使用您建议的 REST API,但我不知道如何使用 json 文件来保证安全