问题描述
我正在尝试使用 Gmail API 发送电子邮件。但是我收到这个错误
googleapi:错误 403:请求的身份验证范围不足。 更多细节: 原因:权限不足,消息:权限不足
我认为这可能与配置有关,我也遵循了 google 的 Quickstart for Go 这是 getClient 函数:
func getClient(config *oauth2.Config) *http.Client {
// The file token.json stores the user's access and refresh tokens,and is
// created automatically when the authorization flow completes for the first
// time.
tokFile := "token.json"
tok,err := tokenFromFile(tokFile)
if err != nil {
tok = getTokenFromWeb(config)
savetoken(tokFile,tok)
}
return config.Client(context.Background(),tok)
}
这是发送的代码:
case "pass":
templateData := struct {
VerPass string
}{
VerPass: cont1,}
emailBody,err := parseTemplate("ver.html",templateData)
if err != nil {
fmt.Println("Parse Err")
return false,err
}
var message gmail.Message
emailTo := "To: " + to + "\r\n"
subject := "Subject: " + sub + "\n"
mime := "MIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n"
msg := []byte(emailTo + subject + mime + "\n" + emailBody)
message.Raw = base64.URLEncoding.EncodetoString(msg)
// Send the message
fmt.Println("OOOOOYYYYY")
//here is the problem
b,err := IoUtil.ReadFile("credentials.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v",err)
}
// If modifying these scopes,delete your prevIoUsly saved token.json.
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)
}
//GmailService
res,err := srv.Users.Messages.Send("me",&message).Do() // change me
if err != nil {
fmt.Println("Res Err")
fmt.Println(err)
return false,err
}
fmt.Println(res)
我试过 for config,gmail.MailGoogleComScope)
,我试过使用 GmailReadonlyScope
和 gmail.GmailSendScope
,但我遇到了同样的错误。
解决方法
请求的身份验证范围不足。
表示已授权您的应用程序访问其数据的用户未授予您的应用程序足够的权限来执行您尝试执行的操作。
您似乎在使用 user.message.send 方法。如果您查看文档,您会发现该方法要求用户获得以下范围之一的授权。
如果您确实遵循了 Googles quick start for go,那么您使用了 gmail.GmailReadonlyScope
作为范围,它只会为您提供只读访问权限。
但是,您的代码现在似乎包含应该可以工作的 mail.MailGoogleComScope
范围,但是我猜您忽略了重新授权应用程序。而且没看到教程里的评论
// 如果修改这些范围,请删除您之前保存的 token.json。
我建议您删除 token.json,然后应用程序将要求您再次对其进行授权,并且您的代码应该可以使用提升的权限。