1 回答

TA貢獻1799條經(jīng)驗 獲得超8個贊
這個問題并不那么明顯,但很容易解決。在初始化時,gmail.NewService()我需要將配置參數(shù)作為選項傳遞,就像之前的實現(xiàn)gmail.New()是使用
所以之前是
client := getClient(config)
srv, err := gmail.New(client)
現(xiàn)在是
client := getClient(config)
ctx := context.Background()
srv, err := gmail.NewService(
ctx,
option.WithHTTPClient(client),
)
在 Go 的 Gmail API 實現(xiàn)的更多上下文中,您需要使用所有使用的函數(shù)
https://developers.google.com/gmail/api/quickstart/go或
https://github.com/googleworkspace/go-samples/blob/master/gmail/quickstart/quickstart.go
并將它們放入您的 go 文件中。這些將生成 AccessToken 和憑據(jù),如果您正確遵循指南,則需要將其保存為 json 文件并重復使用。credentials.json 用于更新您的 AccessToken。
現(xiàn)在代替使用gmail.New(),正確的方法是使用如上所示的函數(shù)。
整個sendGmail函數(shù)如下
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 關注
- 118 瀏覽
添加回答
舉報