1 回答
TA贡献1799条经验 获得超8个赞
这个问题并不那么明显,但很容易解决。在初始化时,gmail.NewService()我需要将配置参数作为选项传递,就像之前的实现gmail.New()是使用
所以之前是
client := getClient(config)
srv, err := gmail.New(client)
现在是
client := getClient(config)
ctx := context.Background()
srv, err := gmail.NewService(
ctx,
option.WithHTTPClient(client),
)
在 Go 的 Gmail API 实现的更多上下文中,您需要使用所有使用的函数
https://developers.google.com/gmail/api/quickstart/go或
https://github.com/googleworkspace/go-samples/blob/master/gmail/quickstart/quickstart.go
并将它们放入您的 go 文件中。这些将生成 AccessToken 和凭据,如果您正确遵循指南,则需要将其保存为 json 文件并重复使用。credentials.json 用于更新您的 AccessToken。
现在代替使用gmail.New(),正确的方法是使用如上所示的函数。
整个sendGmail函数如下
func sendGMail(m models.MailData) error {
credentials := "../gmail_credentials.json"
b, err := ioutil.ReadFile(credentials)
if err != nil {
return errors.New(fmt.Sprint("unable to read credentials file:", err))
}
config, err := google.ConfigFromJSON(b, gmail.GmailSendScope)
if err != nil {
return errors.New(fmt.Sprint("unable to parse credentials file config:", err))
}
client := getClient(config)
ctx := context.Background()
srv, err := gmail.NewService(
ctx,
option.WithHTTPClient(client),
option.WithScopes("https://www.googleapis.com/auth/gmail.send"),
)
if err != nil {
return fmt.Errorf("unable to retrieve gmail client: %s", err)
}
// Create message
gMessage := ComposeMessage(m)
if err := doSend(gMessage, srv); err != nil {
return fmt.Errorf("could not send mail: %s", err)
}
fmt.Println("Email sent")
return nil
}
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报