2015-08-19 156 views
1

我試圖通過IMAP協議從Gmail獲取未讀郵件。我跟着這個tuto:https://briancaos.wordpress.com/2012/04/24/reading-mails-using-imap-and-mailsystem-net/#comment-4999,收到很多好評。 但是,當我打電話.Net - 通過IMAP協議從Gmail獲取未讀郵件時出錯

MessageCollection messages = mails.SearchParse(「UNSEEN」);

我收到錯誤消息「索引和長度必須引用字符串中的位置」。 我只是調用一個簡單的函數,所以我不知道什麼是錯的。有關更多詳細信息,請參閱我的代碼片段:

public class MailRepository 
{ 

    private Imap4Client _client = null; 

    public MailRepository(string mailServer, int port, bool ssl, string login, string password) 
    { 
     if (ssl) 
      Client.ConnectSsl(mailServer, port); 
     else 
      Client.Connect(mailServer, port); 
     Client.Login(login, password); 
    } 

    public IEnumerable<Message> GetAllMails(string mailBox) 
    { 
     return GetMails(mailBox, "ALL").Cast<Message>(); 
    } 

    public IEnumerable<Message> GetUnreadMails(string mailBox) 
    { 
     return GetMails(mailBox, "UNSEEN").Cast<Message>(); 
    } 

    protected Imap4Client Client 
    { 
     get 
     { 
      if (_client == null) 
       _client = new Imap4Client(); 
      return _client; 
     } 
    } 

    private MessageCollection GetMails(string mailBox, string searchPhrase) 
    { 
     Mailbox mails = Client.SelectMailbox(mailBox); 
     MessageCollection messages = mails.SearchParse(searchPhrase); 
     return messages; 
    } 
} 

回答

1

當您的郵件包含非ASCII字符時可能會發生此錯誤。由於我在這裏看不到一個簡單的解決方案,並且不再支持MailSystem.NET,所以我推薦使用另一個庫。

Mailkit似乎是一個不錯的選擇。也請看這裏作進一步參考:https://stackoverflow.com/a/23375968

+0

好主意!我已經試過其他圖書館了。我發現IMAPX是一個不錯的選擇。不過,謝謝你的回覆 –

相關問題