메일을 확인하고 읽는 "이메일 클라이언트"프로그램을 작성합니다. 많은 저자의 소스 코드 (codeproject에서)를 다운로드했지만 프로그램이 매우 오래로드되었고 프로그램을 다시 시작하면 다시 다운로드해야합니다. 다운로드 한 메일을 저장하고 새 메일 만 다운로드 할 생각입니다. 어떻게 메일을 저장할 수 있습니까? XML 또는 SQL을 사용할 수 있습니까? POP3 및 IMAP을 사용하고 있습니다.우리가 읽은 메일을 저장하고 C에서 새로운 이메일 만로드하십시오 #
2
A
답변
0
서버의 메시지에는 UID (적어도 IMAP의 경우)가 있습니다. By definition UID가 증가합니다. UID가 321이면 다음 UID가 322 이상이어야합니다. 따라서 "마지막 UID"를 DB에 저장 한 다음 서버에서 가장 높은 UID를 얻을 수 있습니다. 마지막 것보다 높으면 새 것을로드하십시오.
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("[email protected]", "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 도서관은 완벽하지 않으므로 잘 시험하십시오.
+0
나는이 코드를 시도했지만 그대로 작동했지만 몸을받을 수 없었다. 새로운 IMAP_Fetch_DateItem_Body()를 추가하고 fetchHandler.Body에 이벤트 핸들러를 추가했지만이 함수에서는 null에 대한 스트림과 빈 문자열에 대한 BodySection 만 볼 수 있습니다. 어떤 조언이나 제안? –
절약 문제가있는 부분은 무엇입니까? XML 파일 또는 SQL 데이터베이스 중에서 선택하는 데 문제가 있습니까? XML 파일을 작성하거나 SQL 데이터베이스에 저장하는 방법에 문제가 있습니까? 귀하의 메모리 표현은 어떻게 생겼습니까? 멋진 객체 모델이나 그냥'byte []'를 가지고 있습니까? –
메일의 모든 내용을 저장하십시오. 나는 XML과 SQl 사이에서 선택하고 XML을 생성하는 데 문제가있다. 모든 메모리. – giaosudau