メールをチェックして読むための「メールクライアント」プログラムを書いています。多くの作者のソースコードを(codeprojectで)ダウンロードしましたが、プログラムのロードに非常に時間がかかり、再起動するとプログラムを再度ダウンロードする必要があります。ダウンロードしたメールを保存し、新しいメールのみをダウンロードすることを考えています。どうすればメールを保存できますか? XML または SQL を使用できますか? POP3 と IMAP を使用しています。
2416 次
2 に答える
2
Limisoft ライブラリをチェックしてください。
コードのサンプルは次のとおりです。
using LumiSoft.Net.IMAP;
using LumiSoft.Net.IMAP.Client;
using LumiSoft.Net;
...
using (IMAP_Client client = new IMAP_Client())
{
client.Connect("imap.gmail.com", 993, true);
client.Login("your.username@gmail.com", "your_cool_password");
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 e)
{
Console.WriteLine("next message");
});
fetchHandler.Envelope += new EventHandler<EventArgs<IMAP_Envelope>>(delegate(object s, EventArgs<IMAP_Envelope> e){
IMAP_Envelope envelope = e.Value;
if (envelope.From != null && !String.IsNullOrWhiteSpace(envelope.Subject))
{
Console.WriteLine(envelope.Subject);
}
});
// the best way to find unread emails is to perform server search
int[] unseen_ids = client.Search(false, "UTF-8", "unseen");
Console.WriteLine("unseen count: " + unseen_ids.Count().ToString());
// now we need to initiate our sequence of messages to be fetched
sequence.Parse(string.Join(",", unseen_ids));
// fetch messages now
client.Fetch(false, sequence, new IMAP_Fetch_DataItem[] { new IMAP_Fetch_DataItem_Envelope() }, fetchHandler);
// uncomment this line to mark messages as read
// client.StoreMessageFlags(false, sequence, IMAP_Flags_SetType.Add, IMAP_MessageFlags.Seen);
}
少し複雑ですが、うまく機能します。Limisoft ライブラリは完璧ではないため、十分にテストしてください。
于 2011-03-30T09:12:17.713 に答える
0
サーバー上のメッセージには UID があります (少なくとも IMAP の場合)。 定義上、UID は増加するだけです。つまり、UID が 321 の場合、次の UID は 322 以上でなければなりません。したがって、「最後の UID」を DB に保存し、サーバーから最高の UID を取得できます。前回のものより高い場合は、新しいものをロードします。
于 2011-03-13T18:36:06.797 に答える