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.

私は、誰かが Blackberry 電話やあまり知られていない電子メール クライアントを介して電子メールを送信したときに発生することに気付きました。

メールボックスの Web インターフェイスにアクセスして、Blackberry Phone から送信された問題のあるメールを削除すると、再び機能し始めます。

これを回避するには、どこから始めればよいですか?

4

0 に答える 0