使用c#从gmail获取未读数

本文关键字:获取 gmail 使用 | 更新日期: 2023-09-27 18:17:27

我一直在尝试获取Gmail中未读邮件的数量,但我遇到了一些问题。我做了一个搜索,我发现ImapX库应该可以帮助我实现这一点,但是我在StackOverFlow上找到的关于预览问题的代码不起作用。这是我现在的代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string username = "my_email@gmail.com";
            string passwd = "my_pass";
            int unread = 0;
            ImapClient client = new ImapClient("imap.gmail.com", 993, true);
            bool result = client.IsConnected;
            if (result)
                Console.WriteLine("Connection Established");
            result = client.Login(username, passwd); // <-- Error here
            if (result)
            {
                Console.WriteLine("Logged in");
                FolderCollection folders = client.Folders;
               // Message messages = client.Folders["INBOX"].Messages;
                foreach (ImapX.Message m in client.Folders["INBOX"].Messages)
                {
                    if (m.Seen == false)
                        unread++;
                }
                Console.WriteLine(unread);
            }
        }
    }
}

错误是:

选择的身份验证机制是不支持的"在第26行

result = client.Login(username, passwd);

使用c#从gmail获取未读数

ImapX示例:

var client = new ImapX.ImapClient("imap.gmail.com", 993, true);
client.Connection();
client.LogIn(userName, userPassword);
var messages = client.Folders["INBOX"].Search("ALL", true);

也许您启用了双因素身份验证,需要生成应用程序密码。否则,您将收到一封电子邮件警告,表示有东西试图访问您的邮箱,您必须将应用程序添加为例外。作为另一种解决方案,您可以尝试在README

底部的https://github.com/jstedfast/MailKit示例代码

最有可能的是,gmail正在寻找你做一个STARTTLS命令,它似乎不支持ImapX。如果查看对IMAPX1 CAPABILITY请求的响应,您可能会看到一个"LOGINDISABLED"元素,这意味着服务器还不接受"LOGIN"语句。因此,即使您使用了UseSSL,服务器(在我的情况下是Microsoft Exchange)在允许我登录之前仍在寻找STARTTLS命令。

你必须建立联系。

        ImapClient client = new ImapClient("imap.gmail.com", 993, true);
        client.Connect();
        bool result = client.IsConnected;

所以如果你添加了一行client.Connect(),我认为它解决了你的问题。