Du bist nicht angemeldet.

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

1

Dienstag, 21. Juli 2009, 10:17

Email Empfang über POP3

Auf der Suche nach geeignetem Code für den POP3 Email Empfang bin ich über ein OpenSource Projekt gestolpert, es nennt sich OpenPOP3.
Natürlich ist das Protokoll für POP3 nicht sonderlich kompliziert, jedoch das E-Mail Parsing schon.

Leider gibt es z.Z. noch keine geeignete Dokumentation zu diesem Projekt, aber durch ein wenig rumprobieren habe ich es nun hinbekommen, Mails zu holen und Attachments mit zu sichern.

Download der Binaries:
http://sourceforge.net/projects/openpop3/files/

Download vom VB-Paradise Server (*hinzugefügt am 22.07.2009*)

Benötigt wird:
- Form1
- Button1
- TextBox1
- ListBox1
- ListBox2

Verweise:
OpenPOP.dll
MIMEParser.dll

Imports:
System.IO
OpenPOP
OpenPOP.Pop3

Globale Variablen:

Visual Basic Quellcode

1
2
Dim Messages As New List(Of String)
 Dim AttachArray As New ArrayList


Code für Button1:

Visual Basic Quellcode

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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim pop3 As New POPClient

    pop3.Disconnect()
    pop3.Connect("pop.host.de", 110)
    pop3.Authenticate("benutzeraccount", "benutzerpasswort")

    ListBox1.Items.Clear()

    For i As Integer = 1 To pop3.GetMessageCount
        Dim m As MIMEParser.Message = pop3.GetMessage(i, False)

        ListBox1.Items.Add("From: " & m.From & " <" & m.FromEmail & "> - " & m.Subject)

        If m.MessageBody.Count > 0 Then
            Dim Attach As New List(Of MIMEParser.Attachment)
            Messages.Add(m.MessageBody(m.MessageBody.Count - 1))

            For ii As Integer = 1 To m.AttachmentCount - 1
                Attach.Add(m.GetAttachment(ii))
            Next

            AttachArray.Add(Attach)
        End If

        ' pop3.DeleteMessage(i)        ' Wenn die Message nach abholung gelöscht werden soll 
    Next
    pop3.Disconnect()
End Sub


Code für ListBox1:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    TextBox1.Text = Messages(sender.SelectedIndex)

    ListBox2.Items.Clear()
    For Each att As MIMEParser.Attachment In AttachArray(sender.SelectedIndex)
        ListBox2.Items.Add(att.ContentFileName & " " & att.ContentLength & " Byte")
    Next
End Sub


Code für ListBox2:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub ListBox2_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
    Dim att As MIMEParser.Attachment = AttachArray(ListBox1.SelectedIndex)(sender.SelectedIndex)
    Dim fs As FileStream = File.Create(Application.StartupPath & "/attach/" & att.ContentFileName)
    Dim da() As Byte

    da = att.DecodedAttachment

    fs.Write(da, 0, da.Length)

    MsgBox("'" & att.ContentFileName & "' wurde gespeichert!")

    fs.Close()
End Sub


Informationen Header der Mail:
Hier ist eine Liste der Informationen, die man aus dem Mail Header auslesen kann. Die Variable m steht hier für die Message (siehe Code Button1):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String m.AttachmentBoundry
String m.AttachmentBoundry2
Integer m.AttachmentCount
Array(Of String) m.BCC
Array(Of String) m.CC
Array(Of String m.TO
String m.ContentEncoding
String m.ContentType
String m.From
String m.FromEmail
Boolean m.HasAttachment
String m.MessageID
String m.Subject
String m.Date
String m.Received
Boolean m.HTML
String m.Importance
String m.ReplyTo
String m.ReplyToEmail
Function(att As MIME.Parser.Attachment, Filename) m.SaveAttachment
Function(Path) m.SacheAttachments



Ich hoffe es hilft einigen weiter, mir hat es sehr geholfen. Die Libraries verfügen auch noch über diverser anderer nützlicher Funktionen, aber dieses hier ist denke ich mal der Hauptteil.


Edit by LaMa5:
- Download vom VB-Paradise Server hinzugefügt
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Dodo« (22. Juli 2009, 07:42)


Es haben bereits 4 registrierte Benutzer diesen Beitrag als hilfreich eingestuft.

Benutzer, die diesen Beitrag hilfreich fanden:

tybae, PChirn, Florian, slay87

urzeitfurz

Registrierter Benutzer

  • »urzeitfurz« ist männlich

Beiträge: 119

Dabei seit: 8. Juni 2009

Wohnort: Hannover

Hilfreich-Bewertungen: 2

  • Private Nachricht senden

2

Donnerstag, 21. Januar 2010, 17:57

Tach,
ich bekomme gleich zwei Fehlermeldungen:
1. Wenn ich mehr als eine Mail empfange und nicht die erste in der Listbox auswähle kommt folgende Meldung: "Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein. Parametername: index"

2. Wenn ich Anhänge speichern will kommt folgende Meldung: "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch." Ich habe aber alle Ordner erstellt.

Renate_Eilhoff

Registrierter Benutzer

  • »Renate_Eilhoff« ist weiblich

Beiträge: 310

Dabei seit: 23. Februar 2009

  • Private Nachricht senden

3

Donnerstag, 4. März 2010, 09:01

Hallo ein Sehr cooles Programm.
Eine kurze frage:
Wenn ich eine exe erzeuge und diese dann auf einen anderen Pc starte. Findet er die 2 .dll Dateinen nicht.
Was kann ich da machen?

Vielen Dank

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

4

Donnerstag, 4. März 2010, 14:14

Liegen die DLLs bei dem Programm dabei? Wenn die DLLs als Verweise einfügst unter MyProject, schau mal ob da Lokale Kopie auf True gestellt ist, ansonsten dies nachholen.
Nach dem Builden sollten die DLLs auch im Release Ordner sich befinden.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Werewolve

Registrierter Benutzer

  • »Werewolve« ist männlich

Beiträge: 294

Dabei seit: 30. November 2008

Wohnort: Attendorn / Sauerland / NRW

Hilfreich-Bewertungen: 6

  • Private Nachricht senden

5

Donnerstag, 4. März 2010, 19:09

Muss ich da irgendwas beachten wenn ich von gmx Mail holen will? So richtung SSL? Weil bei mir geht es nicht! :D

metakilla

was ist geil und hat einen goldenen Stern?

  • »metakilla« ist männlich

Beiträge: 1 153

Dabei seit: 29. November 2007

Wohnort: wieder im schönen Oberschwaben...

Frühere Benutzernamen: powerprogger

Hilfreich-Bewertungen: 2

  • Private Nachricht senden

6

Montag, 8. März 2010, 10:24

du musst ggf. den Port ändern. Ich weiß zwar nicht direkt welcher das von gmx ist, aber der von web.de ist die 110.

BTT:
Der Code funktioniert fehlerfrei, nur wie speichert man die Nachrichten auf dem Rechner, bzw. wo?
Lass mich ich kann das :thumbup: ! - Ooh, kaputt :rolleyes: .

technobase

Registrierter Benutzer

  • »technobase« ist männlich

Beiträge: 60

Dabei seit: 18. Oktober 2009

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 2

  • Private Nachricht senden

7

Dienstag, 23. März 2010, 18:59

Email über Pop 3 abrufen

Jedesmal wenn ich es versuche hängt sich das programm auf(um genau zu sein beim pop3.connect)^^
hab schon hotmail und googlemail getestest (ports gibts ja hier) also dann host und port richtig geändert und es funktioniert einfach nicht! HILFE! =D freue mich über jede Hilfe!

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

8

Mittwoch, 24. März 2010, 09:26

Das ist keine Offizielle Liste, Hotmail bietet das soweit ich weiß NICHT an, was mit google ist weiß ich nicht. Wenn es nicht funktioniert, scheints auch nicht zu gehen. Ansonsten kann man sowas einfach mit Putty oder so testen. Einfach Host und Port angeben und connecten, wenn die Anfrage nach Username und Passwort kommt, muss es auch mit der DLL gehen.

@metakilla:
Ich bin mir gerade nicht sicher, aber ich glaube in den Namespaces gibt es irgendwo eine Funktion mit der man die Mails im MIME Format speichern kann, heißt so wie sie abgeholt werden mit Header und den Base64 Encodeten Anhängen drin. Diese muss man dann auch nur wieder über den Namespace laden, sie werden geparsed und nun kann man wieder mit .Text .From und so auf die Attachments zugreifen.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

viperkill

Registrierter Benutzer

  • »viperkill« ist männlich

Beiträge: 371

Dabei seit: 10. August 2009

Wohnort: Papierkorb

Hilfreich-Bewertungen: 9

  • Private Nachricht senden

9

Mittwoch, 24. März 2010, 15:29

Hi,

das Programm hängt sich beim laden IMMER auf. Nach ca. 1-2 Minuten reagiert das Programm dann aber wieder und die Emails werden angezeigt.


Grüsse,

viperkill

picoflop

Böse und gemein!

Beiträge: 5 843

Dabei seit: 19. März 2009

Hilfreich-Bewertungen: 546

  • Private Nachricht senden

10

Mittwoch, 24. März 2010, 16:42

das Programm hängt sich beim laden IMMER auf.

Aufhängen heißt "tot".
Wenn die GUI längere Zeit nicht reagiert, heißt das, dass eine langwierige Aktion läuft. Hier vermutlich das Laden der EMails vom Server? Sollte man dann halt in nen BGW o.ä. packen.
Von Hilfeanfragen via PN ist ABZUSEHEN!


GUI - Threading Best Of - Async - x64 Excp

progglord

Registrierter Benutzer

  • »progglord« ist männlich

Beiträge: 902

Dabei seit: 10. April 2009

Wohnort: Holzminden

Hilfreich-Bewertungen: 22

  • Private Nachricht senden

11

Freitag, 26. März 2010, 15:56

Hey,
mit dem SSL, habe ich gerade eine Lösung gefunden:
http://code.google.com/p/openpop-ssl/downloads/list
Einfach diese Datein für OpenPOP und MIMEParser nutzen, dann kann man noch beim POPClienten IsUsingSsl auf True stellen und es nutzt SSL, sonst ist es genau das gleiche ;).

reustli

Registrierter Benutzer

  • »reustli« ist männlich

Beiträge: 378

Dabei seit: 26. März 2009

Wohnort: Luzern CH

  • Private Nachricht senden

12

Montag, 26. April 2010, 10:05

Hallo Dodo
Geniale Sache, funktioniert bei mir ohne Probleme.
Etwas habe ich aber noch nicht heraus gefunden, vielleicht weiss da jemand Bescheid.

Ich möchte noch einbinden, dass mir die eigentliche Nachricht auch angezeigt wird ... habe aber unter der Variable m nichts gefunden.

Gruss

Croasider

Registrierter Benutzer

  • »Croasider« ist männlich

Beiträge: 650

Dabei seit: 15. Februar 2009

Hilfreich-Bewertungen: 24

  • Private Nachricht senden

13

Freitag, 30. April 2010, 17:43

Hallo

Habs hinbekommen aber womit kann ich den Text der E-mail auslesen?

EDIT:Bekomme auch das hin mit:

Visual Basic Quellcode

1
TextBox1.Text = Messages(sender.SelectedIndex)


Dann kommt allerdings sowas:
 Hier klicken für weitere Informationen

Zitat

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.E-MailFormatvorlage17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
..MsoChpDefault
{mso-style-type:export-only;}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>

<body lang=DE link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>Hallo Welt<o:p></o:p></p>

</div>

</body>

</html>


Habe allerdings nur Hallo Welt geschrieben. Wie kann ich das rausfiltern?

Zitat

17:42: Es funzt einfach nicht...
17:47: Habe den Fehler gefunden - meine Frau war's

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Croasider« (7. Mai 2010, 10:28)


vbExtremeFan

Registrierter Benutzer

  • »vbExtremeFan« ist männlich

Beiträge: 69

Dabei seit: 9. Mai 2010

  • Private Nachricht senden

14

Sonntag, 9. Mai 2010, 19:35

Alles erledigt

funkt. Super
Mein PC : Apple iMac 27" i7 6GB ram 1TB und 2. AMD Phenom x6 ii 1100 übertaktet auf 4,0GHZ, GTX 580 FTE 16 gb Ram 1,5TB hdd, Server 2x HP ProLiant DL380 g4

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »vbExtremeFan« (10. Mai 2010, 18:54)


reustli

Registrierter Benutzer

  • »reustli« ist männlich

Beiträge: 378

Dabei seit: 26. März 2009

Wohnort: Luzern CH

  • Private Nachricht senden

15

Montag, 10. Mai 2010, 17:25

Hallo
Versuche es mal mit einem Webbrowser Control, sieht nach HTML aus, villeicht filtert er das heraus. Habe gerade keinen HTML Editor um das zu versuchen.

Gruss
reustli

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

16

Dienstag, 11. Mai 2010, 07:00

Ja, dann hast du aber eine HTML E-Mail geschrieben und keine normale Text E-Mail, das kann man meist irgendwie beim Mailschreiben auswählen, zumindest bei Web.de.
Um die Mail anzeigen zu lassen müsstest du halt entweder eine Browser Engine nehmen wie z.B. das WebBrowser Control oder du parsed das selbst und suchst dir via RegEx den Content selber heraus.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

idiotensicher

Registrierter Benutzer

Beiträge: 4

  • Private Nachricht senden

17

Dienstag, 10. August 2010, 16:15

ungelesene mails

hallo,

ersteinmal ein dickes, fettes Lob für diesen super guten tipp

doch eine frage hätte ich noch:

kann man auch herausfinden ob eine mail schon gelesen wurde ?

danke im vorraus

jvbsl

Noob

  • »jvbsl« ist männlich

Beiträge: 7 206

Dabei seit: 7. April 2010

Hilfreich-Bewertungen: 397

  • Private Nachricht senden

18

Dienstag, 10. August 2010, 17:39

GetMessage sollte(wenn es so angewendet wird, wie bei mir :P) nur die ungelesenen E-Mails abrufen...
Ich wollte auch mal ne total überflüssige Signatur:
---Leer---

idiotensicher

Registrierter Benutzer

Beiträge: 4

  • Private Nachricht senden

19

Dienstag, 10. August 2010, 18:11

meinst du die, die noch auf dem server liegen, oder die, die wirklich ungelesen sind.(deutsch ?( )
denn bei mir zeigt er alle an, die auf dem server liegen.

danke im vorraus

timi257

dankeschöön :)*

Beiträge: 606

Hilfreich-Bewertungen: 10

  • Private Nachricht senden

20

Donnerstag, 2. September 2010, 19:35

Genau das ist auch mein problem - ich will damit nur checken, ob ich NEUE E-Mails habe - und nicht alle auf dem server auflisten... - gibts da einen code dafür?

Hey, ich wollte Ihnen nur mal Danke sagen :D ;) :love:
Weil ich einfach keinen Hunger hab! : )

Social Bookmarks