为什么我的MailKit身份验证失败?

问题描述 投票:0回答:1

更新2:

将我的范围更新为:

private readonly string[] Scopes = { GmailService.Scope.MailGoogleCom };

已连接至imaps://imap.gmail.com:993 / S:*确定,Gimap准备用于来自122.199.45.135 s90mb321411106pjc的请求C:A00000000功能S:*功能IMAP4rev1取消选择空闲名称空间配额ID XLIST儿童X-GM-EXT-1 XYZZY SASL-IR AUTH = XOAUTH2 AUTH = PLAINAUTH = PLAIN-CLIENTTOKEN AUTH = OAUTHBEARER AUTH = XOAUTH S:A00000000 OK那就是她写的全部! s90mb321411106pjc C:A00000001认证XOAUTH2dXNlcj1mcmFudmEwMDhAZ21haWwuY29tAWF1dGg9QmVhcmVyIHlhMjkuYTBBZHcxeGVWZDNSWWwzcVZlblZwVm1MbDBRRVVyWkdxd05veEd0QWpXLVhHNjRBaF90eWM0NWhwSFprZHA0d3dPWlpGMVZwbGM3dGo1Tm80eVMwc2lPNE1VYmhHV1I1WE9sdWtLUGY4TF9QU0dpZjhrSWM2UXNUbTQwYjlweDNBeXE4bVYtOTM2akEtSHdXekNQVFdGMGk0NGozX2FPTmhEYk5rAQE =S:+eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiSmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ ==C:S:A00000001否[AUTHENTICATIONFAILED]无效的凭据(失败)


更新

这里是日志:

已连接至imaps://imap.gmail.com:993 / S:* OK已准备好Gimap来自122.199.45.135的请求d3mb920463124pjs C:A00000000功能S:*功能IMAP4rev1取消选择空闲名称空间配额ID XLIST儿童X-GM-EXT-1 XYZZY SASL-IR AUTH = XOAUTH2 AUTH = PLAINAUTH = PLAIN-CLIENTTOKEN AUTH = OAUTHBEARER AUTH = XOAUTH S:A00000000 OK那就是她写的全部! d3mb920463124pjs C:A00000001认证XOAUTH2dXNlcj1mcmFudmEwMDhAZ21haWwuY29tAWF1dGg9QmVhcmVyIHlhMjkuYTBBZHcxeGVWZDNSWWwzcVZlblZwVm1MbDBRRVVyWkdxd05veEd0QWpcLVhHNjRBaF90eWM0NWhwSFprZHA0d3dPWlpGMVZwbGM3dGo1Tm80eVMwc2lPNE1VYmhHV1I1WE9sdWtLUGY4TF9QU0dpZjhrSWM2UXNUbTQwYjlweDNBeXE4bVYtOTM2akEtSHdXekNQVFdGMGk0NGozX2FOTmhEYk5rAQE =S:+eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoPQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ ==C:S:A00000001否[AUTHENTICATIONFAILED]无效的凭据(失败)

作用域,我使用:GmailService.Scope.GmailReadonly因为我只需要检索电子邮件。


我正在尝试使用Mailkit从我的Gmail中获取电子邮件:

private readonly string[] Scopes = { GmailService.Scope.GmailReadonly };
    private UserCredential GetGmailCredential()
    {
        UserCredential credential;
        using (var stream = new FileStream("client_id.json", FileMode.Open, FileAccess.Read))
        {
            // 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.
            string credPath = "token.json";
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true),
                new LocalServerCodeReceiver()).Result;
            Console.WriteLine($"Credential file saved to: {credPath}");
        }

        return credential;
    }

    [HttpGet("check")]
    public string GetD()
    {
        using (var client = new ImapClient())
        {
            client.Connect("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
            UserCredential credential = GetGmailCredential();
            //var oauth2 = new SaslMechanismOAuth2("[email protected]", credential.Token.AccessToken);
            var oauth2 = new SaslMechanismOAuth2("myaccount008",credential.Token.AccessToken);
            client.Authenticate(oauth2);
            client.Inbox.Open(FolderAccess.ReadOnly);

            var uids = client.Inbox.Search(SearchQuery.FromContains("bill"));
            string subjects = string.Empty;

            foreach (var uid in uids)
            {
                var message = client.Inbox.GetMessage(uid);
                subjects += message.Subject + Environment.NewLine;
                // write the message to a file
                message.WriteTo(string.Format("{0}.eml", uid));
            }

            client.Disconnect(true);
            return subjects;
        }
    }

行:client.Authenticate(oauth2);引发异常->enter image description hereMailKit.Security.AuthenticationException

我遵循此answer来设置我的Gmail API,但随后出现“身份验证失败”问题。

请帮助

c# .net mailkit
1个回答
0
投票

您使用了错误的范围。您需要使用GoogleService.Scope.MailGoogleCom。

您正在使用的范围不适用于IMAP或POP3访问,仅适用于Google的网络请求API。

© www.soinside.com 2019 - 2024. All rights reserved.