2015-10-13 43 views
1

我一直在嘗試獲取Gmail中未讀電子郵件的數量,但遇到了一些問題。我做了一個搜索,我發現ImapX庫應該可以幫助我實現這個目標,但是我在StackOverFlow上找到的關於預覽問題的代碼不起作用。這是我的代碼現在:使用C#從gmail獲取未讀的計數

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string username = "[email protected]"; 
      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

樣品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示例代碼。

0

很可能,gmail正在尋找您執行STARTTLS命令,它似乎是ImapX不支持的。如果您查看對IMAPX1 CAPABILITY請求的響應,您可能會看到「LOGINDISABLED」元素,這意味着服務器還不會接受「LOGIN」語句。所以,即使你使用SSL,服務器(在我的情況下,Microsoft Exchange)在它讓我登錄之前仍然在尋找STARTTLS命令。

0

您必須進行連接。

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

所以,如果你添加了行client.Connect(),我認爲它解決了你的問題。