googleapi: ошибка 403: в запросе недостаточно областей проверки подлинности. Дополнительные сведения: Причина: недостаточно разрешений, Сообщение: недостаточно разрешений

Я пытаюсь отправить электронное письмо с помощью Gmail API. Но я получаю эту ошибку

googleapi: ошибка 403: в запросе недостаточно областей проверки подлинности. Дополнительные сведения: Причина: недостаточно разрешений, Сообщение: недостаточно разрешений

Я думаю, что это может быть связано с конфигурацией, я также следил за быстрым запуском Google для 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, err := google.ConfigFromJSON(b, gmail.MailGoogleComScope), я пытался использовать GmailReadonlyScopeа также gmail.GmailSendScope, но я получил ту же ошибку.

1 ответ

В запросе недостаточно областей проверки подлинности.

Означает, что пользователь, который разрешил вашему приложению доступ к своим данным, не предоставил вашему приложению достаточно разрешений, чтобы делать то, что вы пытаетесь сделать.

Похоже , вы используете метод user.message.send . Если вы проверите документацию, вы обнаружите, что этот метод требует, чтобы пользователь был авторизован в одной из следующих областей.

Если вы следили за быстрым запуском Google для перехода , то вы использовали gmail.GmailReadonlyScopeкак область, которая даст вам доступ только для чтения. Однако ваш код теперь содержит mail.MailGoogleComScopeобъем, который должен работать, однако я предполагаю, что вы забыли повторно авторизовать приложение. И не увидел комментарий в учебнике

// Если вы изменяете эти области, удалите ранее сохраненный файл token.json.

Я предлагаю вам удалить token.json, а затем приложение потребует от вас повторной авторизации, и ваш код должен работать с повышенными разрешениями.

Другие вопросы по тегам