我一直试图在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);
答案 0 :(得分:0)
来自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);
也许您已启用双因素身份验证,您需要生成应用程序密码。通过其他方式,您将收到一封电子邮件警告,指出某些内容正在尝试访问您的邮箱,您必须将您的应用程序添加为例外。作为替代解决方案,您可以尝试自述文件底部的https://github.com/jstedfast/MailKit
示例代码
答案 1 :(得分:0)
最有可能的是,gmail正在寻找你做一个STARTTLS命令,而ImapX似乎不支持这个命令。如果查看对IMAPX1 CAPABILITY请求的响应,您可能会看到“LOGINDISABLED”元素,这意味着服务器还不会接受“LOGIN”语句。因此,即使您使用了UseSSL,服务器(在我的情况下为Microsoft Exchange)仍然在寻找STARTTLS命令,然后才能让我登录。
答案 2 :(得分:0)
您必须建立连接。
ImapClient client = new ImapClient("imap.gmail.com", 993, true);
client.Connect();
bool result = client.IsConnected;
因此,如果您添加了行client.Connect(),我认为它可以解决您的问题。