Ich möchte ein Programm schreiben, mit dem man E-Mails empfangen kann. das ist soweit fertig, aber wenn ich versuche eine Verbindung herzustellen (mit Klasse TcpClient und der Funktion Connect) muss ich ein Servernamen angeben und einen Port. Dabei kommt folgende Fehlermeldung: "Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig" Ich benutze hier auch keine Instanz der Klasse Socket, da man Sie nirgendwo als Parameter angeben muss. Wie kann ich das Problem lösen?
Und wie genau möchtest du die Mail empfangen? Eher klassisch wie ein Mail-Programm vom Server abholen/pollen? d.H. Client!-Socket an POP3 oder IMAP-Port verbinden lassen, dort Login durchführen, Mail herunterladen. Oder wie ein Mail-Server? Server!-Socket am SMTP-Port lauschen lassen, wenn eine Verbindung hereinkommt, will wohl jemand eine Mail oder SPAM anliefern. Diese "einfach" entgegennehmen.
Ich hab das wie von: http://dotnet-snippets.de/snippet/pop3-e-mails-abrufen/1519 funktioniert aber nicht
Fuzzi59 schrieb: > Ich benutze C# und hol es vom POP3-Server ab dann nimmt man ein fertige Pop3 Klasse. Man muss ein c# das Rad nicht ständig neu erfinden. http://hpop.sourceforge.net/
Brauch ich dafür ein bestimmtes Using-Direktive? Die KLasse(Pop3Client) existiert bei mir nicht?
Fuzzi59 schrieb: > Brauch ich dafür ein bestimmtes Using-Direktive? > Die KLasse(Pop3Client) existiert bei mir nicht? nicht, wenn man die klassennamen mit Namespace schreibt. Du musst auch das Assembly einbinden.
Dann such dir mal ein C#-Grundlagen-Tutorial. Oder besser noch ein Buch.
Ich hab das mit dem Socket gelöst, aber jetzt tritt dieser Fehler auf: In die Übertragungsverbindung können keine Daten geschrieben werden: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen.
Fuzzi59 schrieb: > Eine bestehende Verbindung wurde softwaregesteuert > durch den Hostcomputer abgebrochen. Das Bedeutet: Der Hostcomputer (== POP3-Server) hat die verbindug abgebrochen. Grund dazu kann dir der Hostcomputer-Betreiber sagen. Meistens: Du schickt ungültige Befehle, falschen Benutzernamen/Passwort, oder zu lange "nix", so dass ein Timeout auftritt.
Passwort und E-Mail-Adresse sind richtig. das habe ich überprüft. Das müsste dann doch eigentlich bedeuten, dass ein Timeout auftritt. Muss ich dann meine Benutzerdaten in regelmäßigen Zeitabständen dem Provider senden?
Fuzzi59 schrieb: > Passwort und E-Mail-Adresse sind richtig. das habe ich überprüft. d.H. der POP3-Server schickt dir auch ein "OK" zurück? DAS hast du überprüft? Fuzzi59 schrieb: > ich dann meine Benutzerdaten in regelmäßigen Zeitabständen dem Provider > senden? Ja. Zwischendurch aber die Verbindung schliessen, und später wieder neu aufmachen. Ansonsten: Probier das mal an der "Eingabeaufforderung" mit telnet aus. Da kriegst du ein Gefühl, wer wann was sendet:
1 | $ telnet mail.popserver.com 110 |
2 | Trying 192.168.0.100 |
3 | Connected to mail.popserver.com. |
4 | Escape character is '^]'. |
5 | +OK <21860.1076718099@mail.popserver.net> |
6 | user USERNAME |
7 | +OK |
8 | pass PASSWORD |
9 | +OK |
10 | list |
11 | 1 3713 |
12 | 2 83815 |
13 | 3 6180 |
14 | 4 3813 |
15 | 5 2177 |
16 | 6 4134 |
17 | 7 7168 |
18 | 8 18234 |
19 | . |
20 | retr 1 |
21 | +OK ???? octets |
22 | [[message]] |
23 | . |
24 | dele 1 |
25 | +OK |
26 | quit |
27 | +OK |
28 | Connection closed by foreign host. |
:
Bearbeitet durch User
Mir ist auch aufgefallen, dass der Fehler beim Passwort(richtiges Passwort) ensteht. CommandBuffer = AscEncoding.GetBytes("PASS " + password + "\r\n"); POP3Stream.Write(CommandBuffer, 0, CommandBuffer.Length);
d.H., wenn der Fehler schon beim senden von "PASS xxxx" passiert, ist die Verbindung schon vorher abgebrochen, z.B. beim Usernamen. => Lass dir ausgeben, was der Server auf "USER yyyyy" zurückmeldet! Und: Seit dem NSA-Skandal, "E-Mail made in Germany" usw. bestehen viele Mailanbieter auf verschlüsselte Verbindungen. Deshalb: Probier das mit telnet, Putty o.Ä. selber aus.
Ich vermute auch das Du was falsch machst :) , Hilfreich könnte auch sein ein Netzwerksniffer sein welcher dir sagt was dein Programm wirklich mit den Server bespricht. Wireshark zum Beispiel. Außerdem solltest du bis dein EmailClient hinreichend gut Arbeitet erstmals gegen deinen eigenen Mailserver Testen. Dieser hat bei geeigneter Konfiguration auch eine Debugglog das dir verraten wird warum die Verbindung abbricht. Diene Versuche ein MailClient gegen den Live Mailserver eines Provider zu entwickeln ist höflich Formuliert, eine schlechte Idee, denn du Schmarotzt da CPU Zeit und Bandbreite von den Provider für deine Tests, außerdem stresst du das System des Provider mit Falschen/unvollständigen Request. Sicher in einer Idealen Welt macht das nix, aber im worst case hält der Provider dich für ein Angreifer und muss für solche Fehlerhaften Clients mehr Ressourcen/Personal einsetzen, um sein Operatives Geschäft nicht zu Gefährden.
imon schrieb: > außerdem stresst du das System des Provider mit Falschen/unvollständigen > Request. und wenn es zu oft passiert, dann wird irgendwann mal der dortige Sysadmin auf die Sache aufmerksam. Dann kann es schon mal sein, dass dir der deine Mail überhaupt dicht macht, bzw. du dich erklären musst, was du da überhaupt machst. Und eines kann ich dir sagen: die sind sicher nicht darüber erfreut, wenn jemand mit deinem Kenntnisstand an ihren Server geht.
Um Email (z.B. POP3) zu verstehen, nimmt man ein Terminalprgramm (z.B. Telnet) in die eine und eine POP3-Referenz in die andere Hand. So habe ich das zumindest mal im Unterricht gemacht - kam ganz gut an. POP3 und SMTP sind reine ASCII-Protokolle, kann man prima "zu Fuß" abarbeiten und verstehen lernen. DANACH setzt man die Dialoge in eine beliebige Programmiersprache um, die mit TCP-Sockets umgehen kann ...
Nachtrag: Zum Testen nicht unbedingt an öffentlichen Servern rummachen, da fliegt man über Kurz oder Lang raus. Ich habe für Unterrichtszwecke immer den Mercury-Server aus XAMPP verwendet, der lief auf meinen Laptop im Klassenraum-Netz ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.