Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

15.07.2013, 18:08

C# POP3 nur ungelesene Mails abrufen

Hallo Community,

ich versuche nach dieser Anleitung http://csharp-tricks.blogspot.de/2010/09…-empfangen.html Mails von meinem Web.de-Testaccount abzurufen. Das klappt auch, allerdings werden die Mails nicht als gelesen markiert, wenn ich meinen Posteingang erneut lade, um neue Mails zu erhalten, bekomme ich wieder auch die bereits empfangenen übermittelt. Liegt das an Web.de oder kann man mit Pop3 irgendwie Mails als gelesen markieren und dann nur ungelesene Laden, oder muss man dann IMAP verwenden?
Bei IMAP ist halt das Problem das ich noch keine anständige .dll dafür gefunden hab, die ich kostenlos verwenden kann.
Komisch das es im .NetFreamwork Methoden zum Senden über SMTP gibt, nicht aber etwas zum empfangen.

Hat jemand eine Idee?

Gruß,
MitgliedXYZ

2

15.07.2013, 18:32

Gelesen-Markierungen sind mit POP3 nicht möglich.
Das musst du dir lokal merken oder gelesene Mails vom Server löschen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

3

15.07.2013, 18:35

Die Wikipedia Artikel zu den Protokollen sind ein guter Einstig um dir einige deiner Fragen zu beantworten. SMTP empfangen muss man eigentlich nur wenn man z.B. einen Mail-Server erstellen will.
Genau deine Frage mit den gelesenen Mails steht bei den Vor/Nachteilen von POP3.

Eine IMAP Bibliothek kann ich dir leider nicht nennen.

Post Office Protocol
Simple Mail Transfer Protocol
Internet Message Access Protocol
:love: := Go;

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

16.07.2013, 20:33

Ok, dass die Befehle für POP3 sehen ja richtig überschaubar aus...

Würde es also langen, wenn ich mir merke, wie viele Mails ich heruntergeladen habe und dann für jede Mail folgenden Code durchlaufen lasse
(natürlich wenn vorher schon die Verbindung hergestellt worden ist):

C#-Quelltext

1
2
 mCommandBuffer = mAscEncoding.GetBytes("DELETE " + MailID.ToString());
            mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);


Und am Ende natürlich

C#-Quelltext

1
2
mCommandBuffer = mAscEncoding.GetBytes("QUIT");
            mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);


(Kann mal wieder gerade nicht an den PC und hatte somit noch keine Möglichkeit den Code zu testen)

Oder wie sollte man da am besten vorgehen?

Gruß,
MitgliedXYZ

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (16.07.2013, 20:47)


MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

5

17.07.2013, 16:25

OK, das Problem ist gelöst, ich muss die Mails nicht selbst löschen, sie werden auch so als gelesen markiert.
Am Ende, wenn alle Mails abgerufen worden sind, muss ich nur noch "QUIT" senden, darauf hat also der Server gewartet...

C#-Quelltext

1
mCommandBuffer = mAscEncoding.GetBytes("QUIT \r\n");            mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);


Mist, zu früh gefreut, jetzt werden sie zwar online als gelesen markiert, aber wenn ich das Postfach abrufe bekomme ich die alten Mails doch noch mal. Wenn ich folgendes sende:

C#-Quelltext

1
mCommandBuffer = mAscEncoding.GetBytes("DELETE " + mailNr.ToString() + "\r\n");                    mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);                    MessageBox.Show(mStreamListener.ReadLine().ToString());


Bekomme ich immer die Meldung "-ERR 1 argument required". Hat wer eine Idee?

6

17.07.2013, 17:13

Der Befehl heißt DELE
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

7

17.07.2013, 20:17

Oh, wenn Fehler nur immer so einfach wären. Danke.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

18.07.2013, 12:42

So doch noch eine Frage.

Die Varieble, die den Mailinhalt enthallten soll, sieht bei jeder Mail ungefähr so aus:

Quellcode

1
2
3
4
5
--089e0122e9b0a268bf04e1c6ca7eContent-Type: text/plain; charset=ISO-8859-1Content-Transfer-Encoding: quoted-printable

Hi,wie gehts?Gru=DF.
--089e0122e9b0a268bf04e1c6ca7eContent-Type: text/html; charset=ISO-8859-1Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi,<div>wie gehts?</div><div>Gru=DF.</div></div>


Das ist nicht gerade schön, gibts dafür etwas vorgehfertigtes, damit es wie im gewohnten Mailprogramm aussieht, oder muss man das selbst lösen?
Wie würde man da vorgehen, oder sollte man einfach die ersten vier Zeilen (formatierung ist von der Forensoftware entfernt worden :S ) jeweils entfernen und die Mail nur bis zum zweiten "--" lesen? Ich benötige sowieso keine HTML, sondern nur Textmails.

Gruß,
MitgliedXYZ

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

9

18.07.2013, 18:14

Nu ja, kommt darauf an was genau du genau möchtest.

Der Kopf enthält wichtige Informationen über den Zeichensatz und Codierung( nicht mit Zeichensatz verwechseln). Und wie du es ausgeben möchtest. Das ist ein durchaus recht komplexes Thema.
Ein mögliches Vorgehen wäre, den Inhalt anhand von Zeichensatz und der Codierung in z.B. utf8 umzuwandeln um intern ein einheitliches Format zu Ausgabe zu benutzen. Es können ja auch durchaus mal andere Zeichensätze ankommen. Wenn das alles auschließen kannst und dir die z.B. Quoated Printable Codierung auch egal ist dann reicht dein Vorschlag aus. Die Suchschlagworte stehen ja quasi schon in deinem Mailkopf.

Welche Bibliotheken es da für C# ode rmit bei ist kann ich leider nicht sagen.
:love: := Go;

Werbeanzeige