.Net - 通过IMAP协议从Gmail获取未读邮件时出错

时间:2015-08-19 12:00:53

标签: c# asp.net imap gmail-imap

我尝试通过IMAP协议从Gmail获取未读邮件。我跟着这个tuto:https://briancaos.wordpress.com/2012/04/24/reading-mails-using-imap-and-mailsystem-net/#comment-4999,收到了很多好评。 但是当我打电话时

  

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 个答案:

答案 0 :(得分:1)

当您的邮件包含非ASCII字符时,可能会发生此错误。由于我在这里看不到简单的修复并且不再支持MailSystem.NET,我建议使用替代库。

Mailkit似乎是个不错的选择。另请参阅此处以获取进一步的参考:https://stackoverflow.com/a/23375968