C# POP3 Email Client Web.de

kiname

Cadet 3rd Year
Registriert
Nov. 2014
Beiträge
56
Hallo,

ich will einen POP3 Email Client schreiben der Emails im Postfach von gmx.de oder web.de auslesen kann und nach einem bestimmten muster auswertet (auswertung hat nichts mit der Frage zu tun).

Da ich nicht wusste wie man bei so einem programm beginnt habe ich bisschen gegoogled copy paste und ausprobiert...

Nun habe ich einen Code der Funktioniert. Ich kann mich zum Web.de Mailserver connnecten.
Jedoch wenn ich über meinen NetworkStream Daten senden will bekomme ich als Antwort von web.de dass ich meine Anfragen SSL verschlüsseln soll.
Im internet habe ich dann die Klasse SslStream gefunden und gleich meinen Quelltext demensprechend verändert.
Das Problem liegt jetz in der folgenden Zeile:
Code:
StreamListenerSSL = new StreamReader(POP3StreamSSL);
Wenn der Debugger hier ankommt bricht er die Connect methode ab und öffnet einfach die Form obwohl er noch nicht fertig ist mit dem Load Event. Es wird auch keine fehlermeldung oder ähnliches angezeigt.
Ich habe das Gefühl dass ich den SslStream nicht einfach als Networkstream verwenden kann.

Weiß jemand wie ich einen Ssl Verschlüsselten Networkstream bekomme?
Oder muss ich Den SslStream an den Networkstream weiterleiten oder so?

Lg
Kiname

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net.Sockets;
using System.IO;
using System.Net.Security;

//http://csharp-tricks-en.blogspot.de/2010/09/receive-emails.html

namespace EmailConnection
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        TcpClient POP3Server = new TcpClient(); // TcpClient for the connection to the server
        SslStream POP3StreamSSL;
        //NetworkStream POP3Stream; // network stream for the connection with the server
        StreamReader StreamListenerSSL;
        //StreamReader StreamListener; // StreamReader to convert byte data to readable text
        byte[] CommandBuffer = new byte[1024]; // byte Array for sending commands to the server
        ASCIIEncoding AscEncoding = new ASCIIEncoding(); // ASCII encoding to encode ASCII commands to byte data

        private void Form1_Load(object sender, EventArgs e)
        {
            if (Connect("pop3.web.de", 110, "EineWebEmail ohne @web.de", "DasPasswortFürDenAccountl"))
            {
                Quit();
            }
        }

        private bool Connect(string server, int port, string user, string password)
        {
            POP3Server.Connect(server, port); // connect
            POP3StreamSSL = new SslStream(POP3Server.GetStream());
            //POP3Stream = POP3Server.GetStream(); // create network stream
            StreamListenerSSL = new StreamReader(POP3StreamSSL);
            //StreamListener = new StreamReader(POP3Stream); // create StreamReader from network stream
            if (POP3Server.Connected) // connection succesful
            {
                //MessageBox.Show(StreamListener.ReadLine());
                MessageBox.Show(StreamListenerSSL.ReadLine());

                CommandBuffer = AscEncoding.GetBytes("USER " + user + "\r\n");
                //POP3Stream.Write(CommandBuffer, 0, CommandBuffer.Length);
                POP3StreamSSL.Write(CommandBuffer, 0, CommandBuffer.Length);
                //MessageBox.Show(StreamListener.ReadLine());
                MessageBox.Show(StreamListenerSSL.ReadLine());

                CommandBuffer = AscEncoding.GetBytes("PASS " + password + "\r\n");
                //POP3Stream.Write(CommandBuffer, 0, CommandBuffer.Length);
                POP3StreamSSL.Write(CommandBuffer, 0, CommandBuffer.Length);
                //MessageBox.Show(StreamListener.ReadLine());
                MessageBox.Show(StreamListenerSSL.ReadLine());

                return true;
            }

            return false;
        }
        private void Quit()
        {
            CommandBuffer = AscEncoding.GetBytes("QUIT\r\n");
            //POP3Stream.Write(CommandBuffer, 0, CommandBuffer.Length);
            POP3StreamSSL.Write(CommandBuffer, 0, CommandBuffer.Length);
            //MessageBox.Show(StreamListener.ReadLine());
            MessageBox.Show(StreamListenerSSL.ReadLine());
        }
       
    }
}
 
Erstmal ist der Port falsch. Der muesste bei wahrscheinlich 995 lauten.
Zweitens ist hier eine etwas robustere Variante zu finden (der zweite Codeblock): http://stackoverflow.com/q/2440151/2710739

Um deinen Code funktionsfaehig zu bekommen musst du nach (Zeile 44)
Code:
POP3StreamSSL = new SslStream(POP3Server.GetStream());
den folgenden Teil einfuegen
Code:
POP3StreamSSL.AuthenticateAsClient(server);
 
Zurück
Oben