由于403权限不足,在C#中发送Google Mail失败

时间:2017-05-04 19:18:00

标签: c# gmail-api

我创建了一个控制台应用程序,它将一封电子邮件发送到一个地址,它显示如下:

    private static string[] Scopes = { GmailService.Scope.GmailCompose, GmailService.Scope.GmailSend };
    private static string ApplicationName = "Gmail API Quickstart";

    private const string SUBJECT = "Some simple subject";
    private static string[] emails = new string[] { "teodorescumihail2008@live.com" };

    static void Main(string[] args)
    {
        UserCredential credential;

        using (var stream =
            new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = Environment.GetFolderPath(
                Environment.SpecialFolder.Personal);
            credPath = Path.Combine(credPath, ".credentials/gmail-dotnet-quickstart.json");

            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            Console.WriteLine("Credential file saved to: " + credPath);
        }

        // Create Gmail API service.
        var service = new GmailService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName,
        });

        var msg = new AE.Net.Mail.MailMessage
        {
            Subject = SUBJECT,
            Body = "Test body",
            From = new MailAddress("teodorescumihail2008@gmail.com")
        };

        msg.To.Add(new MailAddress("teodorescumihail2008@live.com"));
        StringWriter sw = new StringWriter();
        msg.Save(sw);

        var result = service.Users.Messages.Send(new Message
        {
            Raw = Base64UrlEncode(sw.ToString())
        }, "me").Execute();

        Console.Read();
    }

    private static string Base64UrlEncode(string input)
    {
        var inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
        // Special "url-safe" base64 encode.
        return Convert.ToBase64String(inputBytes)
          .Replace('+', '-')
          .Replace('/', '_')
          .Replace("=", "");
    }

执行发送电子邮件时,我收到了:

enter image description here

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

我假设您在代码中更改了范围,而没有从Gmail重新授权/获取新的凭据文件。问题是GmailAPI不知道您的范围已更新。您必须通过删除应用程序权限并在GmailAPI中重新授权您的应用程序,并重新生成您的certificate.json,以便在GmailAPI上更新范围。

要删除您的应用权限:click here