tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
332
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Hallo Leute, ich programmiere zur Zeit an einem E-Mail-Client. Momentan läuft auch alles soweit gut und ich kann auch über authentifizierten SMTP-Servern Mails verschicken, sogar mit Datei-Anhang etc. Nun gehts um den POP-Abruf von E-Mails. Ich kann mich zwar schon mit dem POP-Server verbinden, das sieht wie folgt aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    
    public void POPConnect()
    {
        if (File.Exists("data.dat") == false)
        {
            MessageBox.Show("Bitte legen Sie ein Konto an oder korregieren Sie Ihre Eingaben!");
            Konto creKonto  = new Konto();
            creKonto.Show();
        }
        else
        {
            // Login-Data
            string[] lines = System.IO.File.ReadAllLines("data.dat");
            string POPServ = lines[2];
            string User = lines[4];
            string Passw = lines[5];
                
            // change cursor into wait cursor
            Cursor cr = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;
        
            // create server POP3 with port 110
            Server = new TcpClient(POPServ,110);                                
            Status.Items.Clear();
        
            try
            {
                string welcome = "------------ Welcome to PrimeMail ------------";
                string stat = "--------------------LOAD Status--------------------";
                string end =  "----------------- Status FINISHED -----------------";
                Status.Items.Add(welcome.ToString());
                Status.Items.Add(stat.ToString());
                // initialization
                NetStrm = Server.GetStream();
                RdStrm= new StreamReader(Server.GetStream());
                Status.Items.Add(RdStrm.ReadLine());
        
                // Login Process
                Data = "USER "+ User+CRLF;              
                szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                NetStrm.Write(szData,0,szData.Length);
                Status.Items.Add(RdStrm.ReadLine());
        
                Data = "PASS "+ Passw+CRLF;             
                szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                NetStrm.Write(szData,0,szData.Length);
                Status.Items.Add(RdStrm.ReadLine());
        
                // Send STAT command to get information ie: number of mail and size
                Data = "STAT"+CRLF;             
                szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                NetStrm.Write(szData,0,szData.Length);
                Status.Items.Add(RdStrm.ReadLine());
                Status.Items.Add(end.ToString());
                // back to normal cursor
                Cursor.Current = cr;
        
            }
            catch(InvalidOperationException err)
            {
                Status.Items.Add("Error: "+err.ToString());
            }
                       }
    }

    Soweit so gut, Ich habe auch schon was um zu empfangen. Ich muss im quasi einen Wert geben welche E-mail er abrufen soll. Diese zeigt er dann im richtextBox1 an. Diese lautet wie folgt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    public void POPReceive()
    {
        // change cursor into wait cursor
        Cursor cr = Cursor.Current;
        Cursor.Current = Cursors.WaitCursor;    
        string szTemp;                      
        richTextBox1.Clear();
        try
        {
            // retrieve mail with number mail parameter
            Data = "RETR "+ textBox1.Text+CRLF;             
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData,0,szData.Length);              
     
            szTemp = RdStrm.ReadLine();
            if(szTemp[0]!='-') 
            {
                    
                while(szTemp!=".")
                {
                    richTextBox1.Text += szTemp+CRLF;
                    szTemp = RdStrm.ReadLine();
                }
            }
            else
            {
                Status.Items.Add(szTemp);
            }
                                
            // back to normal cursor
            Cursor.Current = cr;
     
        }
        catch(InvalidOperationException err)
        {
            Status.Items.Add("Error: "+err.ToString());
        }
    }

    Nun wollte ich es gern so haben der der alle Mails abholt, ohne einen bestimmten Wert anzugeben. Hatte vielleicht überlegt erst alle in einem String-Array zu laden und dann weiterzuverarbeiten. Aber ich weiß net genau wie Wollte halt letztendlich die Mails in einer ListBox angezeigt bekommen und dann per klick die Nachricht lesen. Nur weiß ich da nicht wie ich es nu weiter verwirkliche Hat jemand mit dem POP-Abruf erfahrung gemacht?

    Liebe Grüße

    Punisher86
     

  2. #2
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Hallo punisher86,

    mit welchem Framework arbeitest du denn ?
    Selbst unter Net 1.1 gab es glaube ich schon Klassen dafür
    im System.Net Namespace und ab Net 2 gibt es auf jeden Fall
    einen fertigen SMTP Mailclient in System.Net.Mail.
    Warum also das Rad mit TcpClient neu erfinden ?

    Gruß
    Jens
     

  3. #3
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Hi Jens,

    Ich arbeite mit dem .NET 2....
    In System.Net.Mail beinhaltet smtp, das stimmt Soweit habe ich das mit smtp gelöst Ich arbeite jetzt daran POP hinzubekommen Nur dafür gibt es glaub ich keine fertige klasse im .net oder? wüsste ich jedenfalls nicht

    Gruß
     

  4. #4
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Hi ?,

    ja du jast Recht, da waren meine Finger wieder schneller als der
    Kopf.
    Ich habe aber eine Assembly die nicht von mir stammt sondern die ich mal
    auf Codeproject.com gefunden habe.
    Da sind ein SMTP und POP Client enthalten. Beides funktioniert tadellos und
    ist bei mir schon lange im Einsatz.
    Ich hänge das Projekt mal als Zip Datei an und bin sicher das hilft dir weiter.
    Das meiste ist einfach und selbsterklärend.

    Gruß
    Jens
    Angehängte Dateien Angehängte Dateien
     

  5. #5
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Ich danke dir Das hilft mir sehr weiter, danke! Dann werde ich mir das mal zu gemüte tun.

    Liebe Grüße
     

Ähnliche Themen

  1. paint(G...) auf Abruf
    Von MRS im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 10
    Letzter Beitrag: 21.11.06, 21:45
  2. Download Abruf?
    Von Nizomi im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 27.01.06, 15:35
  3. Regelmäßiger Abruf von Seiten
    Von HUBBLE im Forum PHP
    Antworten: 1
    Letzter Beitrag: 05.11.04, 15:21
  4. [outlookExpress] hotmail abruf Fehler
    Von vinc5nt im Forum Office-Anwendungen
    Antworten: 13
    Letzter Beitrag: 19.01.04, 23:01
  5. T-Online email Abruf
    Von vinc5nt im Forum Hardware
    Antworten: 8
    Letzter Beitrag: 02.05.02, 16:12