Das Herunterladen der E-Mail über das POP3-Protokoll ist der einfache Teil der Aufgabe. Das Protokoll ist recht einfach und der einzige schwierige Teil könnten erweiterte Authentifizierungsmethoden sein, wenn Sie kein Klartextkennwort über das Netzwerk senden möchten (und den SSL-verschlüsselten Kommunikationskanal nicht verwenden können). Weitere Informationen finden Sie unter RFC 1939: Post Office Protocol - Version 3
und RFC 1734: POP3 AUTHentication-Befehl .
Der schwierige Teil kommt, wenn Sie die empfangene E-Mail analysieren müssen, was in den meisten Fällen das Parsen des MIME-Formats bedeutet. Sie können in wenigen Stunden oder Tagen einen schnellen und schmutzigen MIME-Parser schreiben, der 95 +% aller eingehenden Nachrichten verarbeitet. Den Parser so zu verbessern, dass er fast jede E-Mail analysieren kann, bedeutet:
- Abrufen von E-Mail-Beispielen von den beliebtesten E-Mail-Clients und Verbessern des Parsers, um von ihnen generierte Fehler und RFC-Fehlinterpretationen zu beheben.
- Stellen Sie sicher, dass Nachrichten, die gegen RFC für Nachrichtenkopfzeilen und -inhalte verstoßen, Ihren Parser nicht zum Absturz bringen und dass Sie jeden lesbaren oder erratenen Wert aus der verstümmelten E-Mail lesen können
- korrekter Umgang mit Internationalisierungsproblemen (z. B. von rechts nach links geschriebene Sprachen, korrekte Codierung für eine bestimmte Sprache usw.)
- UNICODE
- Anhänge und hierarchischer Nachrichtenelementbaum, wie in "Beispiel für Mime-Folter-E-Mail" zu sehen.
- S / MIME (signierte und verschlüsselte E-Mails).
- und so weiter
Das Debuggen eines robusten MIME-Parsers erfordert monatelange Arbeit. Ich weiß, weil ich meinem Freund beim Schreiben eines solchen Parsers für die unten erwähnte Komponente zugesehen habe und auch ein paar Unit-Tests dafür geschrieben habe ;-)
Zurück zur ursprünglichen Frage.
Der folgende Code aus unserer POP3-Tutorial-Seite und Links hilft Ihnen dabei:
Pop3 client = new Pop3();
client.Connect("pop3.example.org");
client.Login("username", "password");
Pop3MessageCollection list = client.GetMessageList();
if (list.Count == 0)
{
Console.WriteLine("There are no messages in the mailbox.");
}
else
{
MailMessage message = client.GetMailMessage(list[0].SequenceNumber);
...
}
client.Disconnect();