0

我正在使用 lumisoft.net.dll 从我的邮箱中读取/轮询电子邮件并将它们记录在数据库中。

这是代码

private List<IMAP_Envelope> GetNewReplies()
{
    List<IMAP_Envelope> lstNewReplies = new List<IMAP_Envelope>() { };

    using (IMAP_Client client = new IMAP_Client())
    {
        client.Connect(Common.IMAPHost, Common.IMAPPort, Common.SSL);
        client.Login(Common.ReplyTo, Common.ReplyToPassword);
        client.SelectFolder("INBOX");

        IMAP_SequenceSet sequence = new IMAP_SequenceSet();
        //sequence.Parse("*:1"); // from first to last

        IMAP_Client_FetchHandler fetchHandler = new IMAP_Client_FetchHandler();
        fetchHandler.NextMessage += new EventHandler(delegate(object s, EventArgs eNexMessage) { });
        fetchHandler.Envelope += new EventHandler<EventArgs<IMAP_Envelope>>(delegate(object s, EventArgs<IMAP_Envelope> eEnvelope)
        {
            lstNewReplies.Add(eEnvelope.Value);
        });

        // the best way to find unread emails is to perform server search
        Int32[] unseen_ids = client.Search(false, null, "unseen");

        if (unseen_ids.Length > 0)
        {
            System.Text.StringBuilder sbUnseenIDs = new System.Text.StringBuilder();
            foreach (Int32 unseen_id in unseen_ids)
            {
                if (sbUnseenIDs.Length <= 0)
                {
                    sbUnseenIDs.Append(Convert.ToString(unseen_id));
                }
                else
                {
                    sbUnseenIDs.Append("," + Convert.ToString(unseen_id));
                }
            }

            // now we need to initiate our sequence of messages to be fetched                    
            sequence.Parse(sbUnseenIDs.ToString());

            // fetch messages now                    
            IMAP_Fetch_DataItem[] lstDataItem = new IMAP_Fetch_DataItem[] { new IMAP_Fetch_DataItem_Envelope() };
            client.Fetch(false, sequence, lstDataItem, fetchHandler);

            //this line marks messages as read
            client.StoreMessageFlags(false, sequence, IMAP_Flags_SetType.Add, IMAP_MessageFlags.Seen);

            //this line marks messages as deleted
            client.StoreMessageFlags(false, sequence, IMAP_Flags_SetType.Add, IMAP_MessageFlags.Deleted);
        }

        //client.CloseFolder();
        client.Expunge();
        client.Disconnect();
        client.Dispose();
    }

    return lstNewReplies;
}

这大部分工作正常,但有时它开始抛出异常

client.Fetch(false, sequence, lstDataItem, fetchHandler);

Invalid Date: Invalid time zone.

我注意到当有人通过他们的黑莓手机或通过一些鲜为人知的电子邮件客户端发送电子邮件时会发生这种情况。

如果我删除了黑莓手机发送的有问题的电子邮件,通过进入邮箱的 Web 界面,它又开始工作了。

我应该从哪里开始寻找解决这个问题?

4

0 回答 0