Forum: PC-Programmierung E-Mail empfangen (Socket?)


von Fuzzi59 (Gast)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

Fuzzi59 schrieb:
> Wie kann ich das Problem lösen?

welche Sprache?

Und wie machst du es genau?

von Εrnst B. (ernst)


Lesenswert?

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.

von Fuzzi59 (Gast)


Lesenswert?

Ich benutze C# und hol es vom POP3-Server ab

von Fuzzi59 (Gast)


Lesenswert?

Ich hab das wie von:
http://dotnet-snippets.de/snippet/pop3-e-mails-abrufen/1519
funktioniert aber nicht

von Peter II (Gast)


Lesenswert?

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/

von Fuzzi59 (Gast)


Lesenswert?

Brauch ich dafür ein bestimmtes Using-Direktive?
Die KLasse(Pop3Client) existiert bei mir nicht?

von Peter II (Gast)


Lesenswert?

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.

von Fuzzi59 (Gast)


Lesenswert?

Das versteh ich jetzt nicht.

von Fred (Gast)


Lesenswert?

Dann such dir mal ein C#-Grundlagen-Tutorial. Oder besser noch ein Buch.

von Fuzzi59 (Gast)


Lesenswert?

Wie binde ich denn ein Assembly ein und welches?

von Quack (Gast)


Lesenswert?

Wie bindet man ein Tutorial oder ein Buch ein?

von Fuzzi59 (Gast)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von Fuzzi59 (Gast)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

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
von Fuzzi59 (Gast)


Lesenswert?

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);

von Εrnst B. (ernst)


Lesenswert?

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.

von imon (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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 ...

von Frank (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.