Dostęp do Imap w C # [zamknięty]

112

Czy istnieje wbudowana metoda uzyskiwania dostępu do serwera Imap (z SSL) w języku C #, czy też jest dostępna dobra darmowa biblioteka?

UnkwnTech
źródło
3
duplicate: stackoverflow.com/questions/545724/…
Mauricio Scheffer
7
Nie. Opublikowany link dotyczy protokołu IMAP specjalnie dla Gmaila. Ten post jednak nie jest.
72
Zachowaj ostrożność podczas wypowiadania / oznaczania pytań jako duplikatów. Mam dość widoku „Duplikat: [link] wszędzie”. W wielu przypadkach inne linki nie
dają
7
Pytanie zamknięte, więc nie mogę dodać tego jako odpowiedzi: github.com/jstedfast/MailKit wydaje się być dobrą opcją i aktywnym projektem.
Rory
4
Oznaczanie przydatnych pytań jako niekonstruktywnych rzeczywiście nie jest konstruktywne ...
Robert J

Odpowiedzi:

90

Od jakiegoś czasu szukałem rozwiązania IMAP i po wypróbowaniu kilku, wybieram AE.Net.Mail .

Możesz pobrać kod, przechodząc do zakładki Kod i klikając małą ikonę „Pobierz”. Ponieważ autor nie udostępnia żadnych gotowych plików do pobrania, należy je samodzielnie skompilować. (Uważam, że możesz to uzyskać za pośrednictwem NuGet). W folderze bin / nie ma już pliku .dll.

Nie ma dokumentacji, co uważam za wadę, ale udało mi się to poprawić, patrząc na kod źródłowy (yay dla open source!) I używając Intellisense. Poniższy kod łączy się konkretnie z serwerem IMAP Gmaila:

// 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", "[email protected]", "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();

Pamiętaj, aby sprawdzić stronę Github, aby uzyskać najnowszą wersję i kilka lepszych przykładów kodu.

Dominic K.
źródło
1
To wygląda zbyt łatwo, aby mogło być prawdziwe, lol. Sprawdzę to!
bendr
4
@jase - Masz rację! Nie jestem pewien, na czym dokładnie polega problem (wygląda na to, że jest to plik właściwości?), Ale udało mi się go skompilować, kopiując wszystkie odpowiednie pliki do nowego projektu klasy. Niezależnie od przypadku, zbudowałem dla Ciebie biblioteki, abyś mógł dodać je jako odniesienia .dll do swojego projektu. dl.dropbox.com/u/8037514/AE.Net.Mail.zip Tak jak zastrzeżenie, dotyczy to wszelkich gwarancji i praw autorskich, z którymi pochodzi oryginalny projekt, i nie jestem odpowiedzialny, jeśli wybuchnie itp. Dobrze szczęście!
Dominic K,
4
+1 Właśnie pobrałem i skompilowałem najnowsze wydanie AE.Net.Mail w VS2010 i działało idealnie. Miałem dużo lepsze wrażenia niż z ImapX, dzięki za wskazówkę. Kod tutaj dał mi dobry początek.
RedFilter
8
dlaczego ludzie idą i piszą takie wspaniałe rzeczy, a potem w zasadzie nie dołączają żadnej dokumentacji? Nie rozumiem
Simon_Weaver
2
Działa, ale w nowszych wersjach konstruktor powinien wyglądać następująco: ImapClient ic = new ImapClient ("imap.gmail.com", "[email protected]", "pass", AuthMethods.Login, 993, true);
Ogglas
34

Mając nadzieję, że niektórym się to przyda, możesz sprawdzić moje podejście:

S22.Imap

Chociaż istnieje kilka dobrych i dobrze udokumentowanych bibliotek IMAP dla .NET dostępnych, żadna z nich nie jest bezpłatna do użytku osobistego, nie mówiąc już o komercyjnym użytku ... i po prostu nie byłem zadowolony z większości porzuconych darmowych alternatyw, które znalazłem.

S22.Imap obsługuje powiadomienia IMAP IDLE, a także SSL i częściowe pobieranie wiadomości. Włożyłem trochę wysiłku w stworzenie dokumentacji i jej aktualność, ponieważ przy projektach, które znalazłem, często dokumentacja była uboga lub nie istniała.

Zapraszam do wypróbowania i daj mi znać, jeśli napotkasz jakiekolwiek problemy!

user1662990
źródło
Najpierw wypróbowałem AE.Net.Mail i stwierdziłem, że S22.Imap jest lepszy, zarówno pod względem dokumentacji, jak i funkcji, których do tej pory potrzebowałem.
angularsen
Podobała mi się koncepcja S22.Imap. Ale brakuje mi dostępu przez indeks lub numer wiadomości.
Tejasvi Hegde
300 na zdrowie dla S22.Imap. Proste, wydajne i przydatne w rzeczywistych scenariuszach. .Search () jest genialny
Vishnoo Rath
Jak mogę zachować synchronizację mojej skrzynki pocztowej za pomocą protokołu IMAP przy użyciu tej biblioteki?
JackXandar
1
Jakieś pomysły, dlaczego otrzymuję wyjątek InvalidCredentialsException z komunikatem „NIE [WEBALERT jakiś adres URL] Wymagany login sieciowy” podczas próby logowania? IMAP jest włączony na koncie Gmail. Pomysły?
Auri Rahimzadeh
19

Nie ma wsparcia dla platformy .NET dla IMAP. Będziesz musiał użyć jakiegoś komponentu innej firmy.

Wypróbuj https://www.limilabs.com/mail , jest bardzo przystępny cenowo i łatwy w użyciu, obsługuje również SSL:

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

    imap.SelectInbox();
    List<long> uids = imap.SearchFlag(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.TextDataString);
    }
    imap.Close(true);
}

Zwróć uwagę, że jest to produkt komercyjny, który stworzyłem.

Możesz go pobrać tutaj: https://www.limilabs.com/mail .

Paweł Leśnikowski
źródło
3
Pobrane i gotowe do działania w ciągu kilku minut :) Bardzo fajnie
Moulde
Czy obsługuje przekazywanie tokena przy użyciu protokołu OAuth 2 zamiast przekazywania hasła?
user1166905
2
Świetny komponent, działa jak urok. Testowałem wersję próbną (prawie w pełni funkcjonalną) przez kilka tygodni, a następnie kupiłem licencję.
Alex
1
To naprawdę świetny element. W przeciwieństwie do wszystkich rzeczy open source, które wypróbowaliśmy, ten jest rzeczywiście żywy i aktualny (piszę to w 2016 roku). Dziękuję @PawelLesnikowski PS. Nie jestem w żaden sposób powiązany.
jazzcat
15

MailSystem.NET zawiera wszystko, czego potrzebujesz do IMAP4. Jest darmowy i open source.

(Jestem zaangażowany w projekt)

Piotr Kula
źródło
2
projekt jest aktywny? najnowsza wersja z dnia: poniedziałek, 14 grudnia 2009, godzina 9:00
Kiquenet,
1
Obecnie nie ma tak wielu funkcji do dodania, ponieważ większość potrzeb jest już uwzględniona. Podczas przesyłania zatwierdzane są tylko poprawki błędów i drobne ulepszenia. Ale nie ma ich tak wiele, biblioteka jest bardzo solidna.
4
Ten projekt wydaje się być martwy. Nie działa poprawnie z IMAP4, brak aktualizacji i odpowiedzi od autorów
Denis Vuyka,
6
@alhambraeidos i @Denis są poprawne. Projekt jest praktycznie martwy. Próbki nie powstają po wyjęciu z pudełka ani w VS 2008, ani w 2010. Przekonwertowałem je, a następnie musiałem przebrnąć przez 16 problemów referencyjnych. Dokumentacja jest nieaktualna, a strona CodePlex pozostaje bez odpowiedzi na wszelkie problemy / komentarze z ostatniego roku lub więcej. Zrezygnowałem i ostatecznie kupiłem Mail.dll (nie, nie jestem z nimi powiązany).
sohtimsso1970
2
projekt jest dość martwy, IDLE nie działa poprawnie mailsystem.codeplex.com/workitem/23586
Greg Dean
5

Spróbuj skorzystać z biblioteki: https://imapx.codeplex.com/

Ta biblioteka jest bezpłatna, open source i ma przykład pod tym adresem : https://imapx.codeplex.com/wikipage?title=Sample%20code%20for%20get%20messages%20from%20your%20inbox

a777andrey
źródło
FYI: imapx nie wydaje się wspierać IDLE
Greg Dean
ImapX obsługuje teraz rozszerzenie IDLE.
Pavel Azanov
z mojego doświadczenia wynika, że ​​ta biblioteka jest znacznie wolniejsza niż AE.Net.Mail - to nie ma żadnego sensu, ale ostrzegam!
Simon_Weaver,
1
Ta biblioteka zawiera główne błędy (v2.0.0.18).
David
2

Sam tego nie próbowałem, ale jest to darmowa biblioteka, którą możesz wypróbować (nie jestem pewien co do części SSL w tej):

http://www.codeproject.com/KB/IP/imaplibrary.aspx

Jest też xemail, który ma parametry SSL:

http://xemail-net.sourceforge.net/

[EDYTUJ] Jeśli Ty (lub klient) macie pieniądze na profesjonalnego klienta pocztowego, ten wątek ma kilka dobrych zaleceń:

Zalecenia dotyczące składnika .NET w celu uzyskania dostępu do skrzynki odbiorczej poczty e-mail

Espo
źródło
Biblioteka Imaplibrary w codeproject jest tym, czego używałem, ale nie ma potrzebnej funkcjonalności. Ill checkout xemail
UnkwnTech
Zmieniłem link, dziękuję za poinformowanie mnie.
Espo
REE: codeproject.com/KB/IP/imaplibrary.aspx w Twojej odpowiedzi; To całkiem fajne. Używam go od zeszłego tygodnia dla klienta poczty e-mail i nie miałem z nim żadnych problemów.
βӔḺṪẶⱫŌŔ