メールボックスからメールを読み取り/ポーリングし、データベースに記録するために 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 から送信された問題のあるメールを削除すると、再び機能し始めます。
これを回避するには、どこから始めればよいですか?