Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MailKit登录gmail IMAP_Gmail_Imap_Mailkit - Fatal编程技术网

如何使用MailKit登录gmail IMAP

如何使用MailKit登录gmail IMAP,gmail,imap,mailkit,Gmail,Imap,Mailkit,我正在尝试使用MailKit()使用oAuth登录Gmail。我可以使用刷新的AuthToken登录到Google API,但是当我尝试在MailKit中使用刷新的token时,我得到一个错误“无效凭据” 有什么线索吗?? 谢谢 杰夫 这是我的密码: var secrets = new ClientSecrets() { ClientId = "xxx-yyy.apps.googleusercontent.com", Client

我正在尝试使用MailKit()使用oAuth登录Gmail。我可以使用刷新的AuthToken登录到Google API,但是当我尝试在MailKit中使用刷新的token时,我得到一个错误“无效凭据”

有什么线索吗?? 谢谢 杰夫

这是我的密码:

 var secrets = new ClientSecrets()
        {
            ClientId = "xxx-yyy.apps.googleusercontent.com",
            ClientSecret = "xyzSecret"
        };

        IAuthorizationCodeFlow flow =
                new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = secrets,
                    Scopes = new string[] { GmailService.Scope.GmailReadonly }
                });

        var tokenResponse = flow.RefreshTokenAsync("", connection.RefreshToken, CancellationToken.None).Result;

        using (var client = new MailKit.Net.Imap.ImapClient())
        {
            var credentials = new NetworkCredential("emailtoconnect@gmail.com", tokenResponse.AccessToken);

            client.Connect("imap.gmail.com", 993, true, CancellationToken.None);
            try
            {
                client.Authenticate(credentials, CancellationToken.None);
            }
            catch (Exception ex)
            {

                throw;
            }


        }

这只是一个范围问题。以上代码适用于gmail oAuth

using (var client = new ImapClient())
            {
                client.Connect("imap.gmail.com", 993, true);  
                client.AuthenticationMechanisms.Remove("XOAUTH2");
                client.Authenticate(EmailId, Password);
            }

上面的代码用于使用imap和MailKit工具登录gmail。但在此之前,您必须手动登录到gmail,并在设置中选中“启用Imap”选项。这肯定会起作用。

更清楚的答案是,原始代码中的作用域不正确

Scopes = new string[] { GmailService.Scope.GmailReadonly }
需要

Scopes = new string[] { GmailService.Scope.MailGoogleCom }

为了使用访问令牌通过imapi进行身份验证。

OAUTH2需要一个自定义身份验证流,它不能使用标准IMAP身份验证,这似乎是在做什么。看起来您正在将访问令牌作为密码传递,而实际上不是。实际上,使用MailKit,我认为它是作为密码传递的。这里有一个链接到另一个使用SMTP的答案,但我的仍然不起作用。我将研究我的AuthCode可能无法使用我需要的AuthCode构建的范围。我刚刚找到了IMAP访问权限。我的只有API的读取权限。直到现在才意识到这是不同的。不管怎样,这里是link@Max.[link]()什么是
连接
变量?这在过去是有效的。我现在遇到了同样的问题。我有一些我重新编译的旧软件,它正好包含这个代码片段。我知道这个旧软件在过去能够连接,但是现在这个代码给出了一个异常“无效凭据”。在gmail中启用了IMAP。找到了一个解决方案,允许对不太安全的应用程序(如我的C#mail monitor)访问gmail(现在建议使用OAuth 2.0-请参阅-稍后将在我的应用程序中修复此问题):在Gmail设置中-转到帐户并导入,然后更改帐户设置:其他GOOGLE帐户设置安全选项卡帐户权限-访问不太安全的应用程序-单击设置-允许不太安全的应用程序访问您的Gmail邮箱。