C# .net 라이브러리를 사용하여 Gmail 서버의 IMAP 메시지 확인 [닫기]

StackOverflow https://stackoverflow.com/questions/545724

  •  23-08-2019
  •  | 
  •  

문제

새 이메일을 확인하기 위해 IMAP SSL을 통해 googlemail 서버에 연결하는 .Net 프레임워크를 사용하는 샘플 코드가 있는 사람이 있나요?

도움이 되었습니까?

다른 팁

위의 프로젝트의 저자로서 나는 그것이 SSL을 지원한다고 말할 수 있습니다.

현재 IMAP 서버와 상호 작용할 수있는 속도를 높이기 위해 완전히 비동기식이 될 새 버전의 라이브러리를 연구하고 있습니다.

이 코드는 완료되지는 않지만 위에 연결된 코드 PLEX 사이트에서 원래 동기 라이브러리 (SSL을 지원하는)와 함께 다운로드 할 수 있습니다.

나는 보는 것이 좋습니다 메일 키트 아마도 가장 강력한 메일 라이브러리이며 오픈 소스 (MIT)입니다.

Mailkit의 멋진 점 중 하나는 모든 네트워크 API가 취소 가능하다는 것입니다 (다른 IMAP 라이브러리에서 볼 수 없었던 것).

또한 메시지 스레딩을 지원하는 유일한 라이브러리입니다.

using System;
using System.Net;
using System.Threading;

using MailKit.Net.Imap;
using MailKit.Search;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            using (var client = new ImapClient ()) {
                using (var cancel = new CancellationTokenSource ()) {
                    client.Connect ("imap.gmail.com", 993, true, cancel.Token);

                    // If you want to disable an authentication mechanism,
                    // you can do so by removing the mechanism like this:
                    client.AuthenticationMechanisms.Remove ("XOAUTH");

                    client.Authenticate ("joey", "password", cancel.Token);

                    // The Inbox folder is always available...
                    var inbox = client.Inbox;
                    inbox.Open (FolderAccess.ReadOnly, cancel.Token);

                    Console.WriteLine ("Total messages: {0}", inbox.Count);
                    Console.WriteLine ("Recent messages: {0}", inbox.Recent);

                    // download each message based on the message index
                    for (int i = 0; i < inbox.Count; i++) {
                        var message = inbox.GetMessage (i, cancel.Token);
                        Console.WriteLine ("Subject: {0}", message.Subject);
                    }

                    // let's try searching for some messages...
                    var query = SearchQuery.DeliveredAfter (DateTime.Parse ("2013-01-12"))
                        .And (SearchQuery.SubjectContains ("MailKit"))
                        .And (SearchQuery.Seen);

                    foreach (var uid in inbox.Search (query, cancel.Token)) {
                        var message = inbox.GetMessage (uid, cancel.Token);
                        Console.WriteLine ("[match] {0}: {1}", uid, message.Subject);
                    }

                    client.Disconnect (true, cancel.Token);
                }
            }
        }
    }
}

Cross는 다른 유사한 질문에서 게시했습니다. 그들이 비슷해지면 어떻게되는지 보시겠습니까?

나는 지금 한동안 IMAP 솔루션을 찾고 있었고, 꽤 많은 것을 시도한 후에는 함께 갈 것입니다. ae.net.mail.

문서는 없으며 단점을 고려한 문서는 없지만 소스 코드 (오픈 소스의 경우)를보고 Intellisense를 사용하여이를 채찍질 할 수있었습니다. 아래 코드는 특별히 Gmail의 IMAP 서버에 연결됩니다.

// Connect to the IMAP server. The 'true' parameter specifies to use SSL
// which is important (for Gmail at least)
ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass",
                ImapClient.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
// Get the first *11* messages. 0 is the first message;
// and it also includes the 10th message, which is really the eleventh ;)
// MailMessage represents, well, a message in your mailbox
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
    Console.WriteLine(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();

나는이 도서관이나 다른 것과 관련이 없지만 매우 빠르고 안정적으로 발견했습니다.

Lumisoft.net 사용할 수 있는 IMAP 클라이언트와 서버 코드가 모두 있습니다.

Gmail에서 이메일을 다운로드하는 데 사용했습니다.개체 모델이 최고는 아니지만 실행 가능하고 다소 유연하고 안정적인 것 같습니다.

다음은 이를 사용한 스파이크의 부분 결과입니다.봉투와 함께 처음 10개의 헤더를 가져온 다음 전체 메시지를 가져옵니다.

using (var client = new IMAP_Client())
{
    client.Connect(_hostname, _port, _useSsl);
    client.Authenticate(_username, _password);
    client.SelectFolder("INBOX");
     var sequence = new IMAP_SequenceSet();
    sequence.Parse("0:10");
    var fetchItems = client.FetchMessages(sequence, IMAP_FetchItem_Flags.Envelope | IMAP_FetchItlags.UID,
                                        false, true);
    foreach (var fetchItem in fetchItems)
    {
        Console.Out.WriteLine("message.UID = {0}", fetchItem.UID);
        Console.Out.WriteLine("message.Envelope.From = {0}", fetchItem.Envelope.From);
        Console.Out.WriteLine("message.Envelope.To = {0}", fetchItem.Envelope.To);
        Console.Out.WriteLine("message.Envelope.Subject = {0}", fetchItem.Envelope.Subject);
        Console.Out.WriteLine("message.Envelope.MessageID = {0}", fetchItem.Envelope.MessageID);
    }
    Console.Out.WriteLine("Fetching bodies");
    foreach (var fetchItem in client.FetchMessages(sequence, IMAP_FetchItem_Flags.All, false, true)
    {             
        var email = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(fetchItem.MessageData);             
        Console.Out.WriteLine("email.BodyText = {0}", email.BodyText);

    }
}

IMAP에 대한 .NET 프레임 워크 지원은 없습니다. 타사 구성 요소를 사용해야합니다.

노력하다 mail.dll 이메일 구성 요소, 그것은 매우입니다 입수 가능한 사용하기 쉽고 지원합니다 SSL:

using(Imap imap = new Imap())
{
    imap.ConnectSSL("imap.company.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uids = imap.Search(Flag.Unseen);
    foreach (long uid in uids)
    {
        string eml = imap.GetMessageByUID(uid);
        IMail message = new MailBuilder()
            .CreateFromEml(eml);

        Console.WriteLine(message.Subject);
        Console.WriteLine(message.Text);
    }
    imap.Close(true);
}

이것은 내가 만든 상용 제품입니다.

여기에서 다운로드 할 수 있습니다. https://www.limilabs.com/mail.

MailSystem.net IMAP4에 대한 모든 요구가 포함되어 있습니다. 무료 및 오픈 소스입니다.

(나는 프로젝트에 관여한다)

이것의 SSL 버전의 소스는 다음과 같습니다. http://atmospherian.wordpress.com/downloads/

또 다른 대안 : Higlabo

https://higlabo.codeplex.com/documentation

좋은 토론 : https://higlabo.codeplex.com/discussions/479250

//====Imap sample================================//
//You can set default value by Default property
ImapClient.Default.UserName = "your server name";
ImapClient cl = new ImapClient("your server name");
cl.UserName = "your name";
cl.Password = "pass";
cl.Ssl = false;
if (cl.Authenticate() == true)
{
    Int32 MailIndex = 1;
    //Get all folder
    List<ImapFolder> l = cl.GetAllFolders();
    ImapFolder rFolder = cl.SelectFolder("INBOX");
    MailMessage mg = cl.GetMessage(MailIndex);
}

//Delete selected mail from mailbox
ImapClient pop = new ImapClient("server name", 110, "user name", "pass");
pop.AuthenticateMode = Pop3AuthenticateMode.Pop;
Int64[] DeleteIndexList = new.....//It depend on your needs
cl.DeleteEMail(DeleteIndexList);

//Get unread message list from GMail
using (ImapClient cl = new ImapClient("imap.gmail.com")) 
{
    cl.Port = 993;
    cl.Ssl = true; 
    cl.UserName = "xxxxx";
    cl.Password = "yyyyy";
    var bl = cl.Authenticate();
    if (bl == true)
    {
        //Select folder
        ImapFolder folder = cl.SelectFolder("[Gmail]/All Mail");
        //Search Unread
        SearchResult list = cl.ExecuteSearch("UNSEEN UNDELETED");
        //Get all unread mail
        for (int i = 0; i < list.MailIndexList.Count; i++)
        {
            mg = cl.GetMessage(list.MailIndexList[i]);
        }
    }
    //Change mail read state as read
    cl.ExecuteStore(1, StoreItem.FlagsReplace, "UNSEEN")
}


//Create draft mail to mailbox
using (ImapClient cl = new ImapClient("imap.gmail.com")) 
{
    cl.Port = 993;
    cl.Ssl = true; 
    cl.UserName = "xxxxx";
    cl.Password = "yyyyy";
    var bl = cl.Authenticate();
    if (bl == true)
    {
        var smg = new SmtpMessage("from mail address", "to mail addres list"
            , "cc mail address list", "This is a test mail.", "Hi.It is my draft mail");
        cl.ExecuteAppend("GMail/Drafts", smg.GetDataText(), "\\Draft", DateTimeOffset.Now); 
    }
}

//Idle
using (var cl = new ImapClient("imap.gmail.com", 993, "user name", "pass"))
{
    cl.Ssl = true;
    cl.ReceiveTimeout = 10 * 60 * 1000;//10 minute
    if (cl.Authenticate() == true)
    {
        var l = cl.GetAllFolders();
        ImapFolder r = cl.SelectFolder("INBOX");
        //You must dispose ImapIdleCommand object
        using (var cm = cl.CreateImapIdleCommand()) Caution! Ensure dispose command object
        {
            //This handler is invoked when you receive a mesage from server
            cm.MessageReceived += (Object o, ImapIdleCommandMessageReceivedEventArgs e) =>
            {
                foreach (var mg in e.MessageList)
                {
                    String text = String.Format("Type is {0} Number is {1}", mg.MessageType, mg.Number);
                    Console.WriteLine(text);
                }
            };
            cl.ExecuteIdle(cm);
            while (true)
            {
                var line = Console.ReadLine();
                if (line == "done")
                {
                    cl.ExecuteDone(cm);
                    break;
                }
            }
        }
    }
}

Lumisoft.ee- 훌륭하고 상당히 쉽게 작동합니다. .NET 4.0으로 컴파일합니다.

다음은 해당 LIB 및 예제에 대한 필요한 링크입니다. 다운로드 메인 :

http://www.lumisoft.ee/lswww/download/downloads/

코드 예제 :

여기에 있습니다 : ... LSWWW/다운로드/다운로드/예제/

.그물:

여기에 있습니다 : ... LSWWW/다운로드/다운로드/넷/

CodePlex (imapclientlumisoft.codeplex.com)에서 그들의 lib를 사용하여 간단한 샘플을 올려 놓고 있습니다. 라이브러리를 사이트에서 직접 가져와야합니다. 나는 그들의 코드를 유지하지 않거나 코드에 대한 권리가 없기 때문에 그것들을 포함하지 않습니다. 위의 링크로 이동하여 직접 다운로드하십시오. VS2010에서 Lumisoft 프로젝트 속성을 설정하여 오류없이 .NET 4.0에 모든 것을 빌드했습니다. 그들의 샘플은 상당히 복잡하고 아마도 예를 들면 크게 코딩 할 수 있습니다. 나는 이것들이 일반적으로 고급 수준 개발자를 대상으로 할 것으로 기대합니다.

그들의 프로젝트는 사소한 조정과 함께 일했습니다. 조정 : IMAP 클라이언트 winform 예제는 프로젝트 속성에 "릴리스"로 설정되어 디버그 지점의 파괴를 방지합니다. 솔루션 "Configuration Manager"를 사용하여 브레이크 포인트가 작동하도록 프로젝트를 "Active (Debug)"로 설정해야합니다. 그들의 예제는 이벤트 처리기에 익명의 방법을 사용하여 엄격한 코딩입니다. 교육 도구로는 좋지 않습니다. 내 프로젝트는 "명명 된"이벤트 메소드 핸들러를 사용하므로 핸들러 내부에서 중단 점을 설정할 수 있습니다. 그러나 그것들은 인라인 코드를 처리하는 훌륭한 방법입니다. 그들은 .NET 3.0 이후로 사용할 수있는 최신 Lambda 방법을 사용했을 수도 있지만 그렇지 않았으며 나는 그것들을 변환하려고 시도하지 않았습니다.

그들의 샘플에서 나는 IMAP 클라이언트를 최소한으로 단순화했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top