_Pop3-Udf (V1.03)

  • Ich habe die _POP3-UDF von dort:
    http://www.autoitscript.com/forum/index.php?showtopic=22838
    komplett überarbeitet:
    - Rückgabewerte geändert (1 = Erfolgreich / 0 = Fehler)
    - _POP3Uidl / _POPList geben nun 2-dim Array zurück
    - Neue Funktion: _POP3Info: gibt die angebenden Informationen über alle Mails in einem Array zurück
    - Programmcode optimiert
    - Array.au3 wird nicht mehr benötigt
    - Dokumentation eingefügt

    da das letzte Update schon über ein Jahr alt war und Au3Check zu viele Warnungen brachte ...

    Hier die "neue" Version:
    _POP3.au3

    9 Mal editiert, zuletzt von Stilgar (24. Februar 2011 um 23:02)

  • Update:

    - _POP3Uidl / _POPList geben nun 2-dim Arrays zurück
    - Neue Funktion: _POP3Info: gibt die angebenden Informationen über alle Mails in einem Array zurück
    - über die globale Variable $pop3_trace = True/False kann die Kommunikation in die Console ausgegeben werden
    - ein paar Fehler korrigiert
    - nochmal alles optimiert

  • Ich habe einen Fehler darin gefunden:

    Wenn das Postfach leer ist, bricht '_POPInfo()' in Zeile 84

    [autoit]

    Local $aRet[$aTMP[0]][$iInf]

    [/autoit]


    ab, weil '$aTMP[0]' = '0' ist.

    Jedenfalls bei Web.de.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Uff wo krieg ich denn nur ein leeres Postfach her ... :D

    Trotzdem mal:
    Update:
    - _POP3Info - Fehler bei leeren Postfächern behoben (hoffentlich)
    - __POP3WaitForOK: Abbruch bei Fehlermeldung vom Server

  • Bei mir klappt es jetzt natürlich auch....

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • _POP3Stat() liefert meiner Meinung nach bei einem leeren Postfach noch etwas falsches ab.

    Die Funktion liefert ein Array mit zwei Elementen, wobei beide "0" sind.

    Der Befehl "__POP3Cmd("STAT")" der Funktion liefert bei mir "0 0" und CRLF zurück, woraus das StringSplit die zwei Elemente erzeugt.

    Sollte man das nicht bessser abfangen ?


    >>> Edit: <<<
    Und noch eine Kleinigkeit an der gleichen Stelle: Egal ob Mails im Portfach vorhanden oder nicht: Am letzten Element des Array's hängt noch das CRLF !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (14. Januar 2010 um 22:40)

  • Warum? Paßt doch: 0 Mails, 0 Oktets.

    Na gut, so gesehen hast Du recht !

    Aber das CRLF (siehe Edit meines letzten Post) ist trotzdem nicht Ok.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Oscar :
    Danke! :)

    Update:

    - Neu: _POP3MsgCnt: gibt die Anzahl der Mails im Postfach zurück
    - crlf im Ergebnis von _POP3Stat entfernt
    - _POP3Stat: liefert im Fehlerfall nun auch ein array mit a[-1,-1]
    - _POP3Info: die Anzahl der Mails steht nun in array[0][0]

  • Vorerst (vermutlich letztes) Update:

    * _POPConnect:
    - der POP-Server wird nun automatisch zu ermitteln versucht:
    : funktioniert nur wenn der Login-Name aus der eMail-Adresse besteht
    : der Mail-Server mit pop oder pop3 beginnt
    : alternativ wird auch die .com-Endung getestet
    - die Reihenfolge der Parameter hat sich geändert.
    - bei einem Versuch mit Port 995 zu verbinden wird nun abgebrochen

    Beispielaufruf:

    [autoit]

    _POP3Connect("AnnExampleUser@gmx.net", "0815")

    [/autoit]
  • HI,

    sorry habe gerade keine Zeit zum Test, aber geht es auch durch einen Proxy? Ich denke nicht, da es wieder TCP ist, richtig?

    Mega


    Kann es zwar gerade auch nicht testen, aber da TCP würde ich einfach mal sagen - nein geht vermutlich nicht.

    Bei mir kommt der Fehler:

    _POP3Connect: Error: SSL not supported ...


    Wie die Fehlermeldung schon sagt: SSL (Port 995) wird nicht unterstützt.

    • Offizieller Beitrag

    Hallo Stilgar!

    Für mein Projekt "POP-Show" benutze ich ja Deine UDF. Beim Befehl _POP3List() gibt es allerdings ein Problem mit Yahoo-Konten. Der Yahoo-Server liefert eine etwas abweichende Antwort zurück.

    Hier mal die Ausgabe bei meinem 1und1-Account (Passwörter unkenntlich gemacht und Ausgabe auf das Wesentliche reduziert):

    Code
    [...]
    >: PASS **********************
    <: +OK mailbox "***********" has 1 messages (965 octets) H mibap0
    >: LIST
    <: +OK
    1 965
    .


    Das resultierende Array sieht dann so aus:
    autoit.de/wcf/attachment/11091/
    Alles ok, soweit!

    Das Gleiche bei meinem Yahoo-Account:

    Code
    [...]
    >: PASS **********************
    <: +OK maildrop ready, 1 message (5085 octets) (6418)
    >: LIST
    <: +OK 1 message (5085 octets)
    1 5085
    .


    Hier folgt nach dem "+OK" noch "1 message (5085 octets)", was dann zu diesem Array führt:
    autoit.de/wcf/attachment/11092/

    Es gibt also einen Eintrag zuviel und die Anzahl [0] ist falsch. Das betrifft nur die _POP3List() Funktion. _POP3Info() arbeitet korrekt.
    Ich habe die Funktion nun so angepasst:

    Spoiler anzeigen
    [autoit]


    Func _POP3List($iMsg = -1)
    If $POP3_ISAUTH Then
    Local $aRet[1][2], $aTMP2
    Local $sAddMsg = ""

    [/autoit] [autoit][/autoit] [autoit]

    If $iMsg <> -1 Then
    $sAddMsg = " " & $iMsg
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; Send List
    Local $sRet = __POP3Cmd("LIST" & $sAddMsg)
    If @error Then Return SetError(@error, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $sRet = StringRegExpReplace($sRet, '.+?message.+\(.+\)\r\n', @LF) ; Yahoo-Support

    [/autoit] [autoit][/autoit] [autoit]

    While $iMsg = -1 And Not StringRegExp($sRet, "\r\n\.\r\n")
    $sRet = $sRet & __POP3WaitTcpResponse()
    If @error Then Return SetError($POP3_ERROR_NO_TCP_RESPONSE, 0, 0)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; Stripping useless infos for complete listing
    If $iMsg = -1 Then
    $sRet = StringMid($sRet, 2, StringLen($sRet) - 6)
    Else
    $sRet = StringMid($sRet, 1, StringLen($sRet) - 2)
    EndIf
    Local $aTMP = StringSplit(StringStripCR($sRet), @LF)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iE = UBound($aTMP)
    ReDim $aRet[$iE][2]
    $aRet[0][0] = $iE - 1
    For $i = 1 To $iE - 1
    $aTMP2 = StringSplit($aTMP[$i], " ", 2)
    $aRet[$i][0] = $aTMP2[0]
    $aRet[$i][1] = $aTMP2[1]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return $aRet
    EndIf
    EndFunc ;==>_POP3List

    [/autoit]

    Neu ist nur diese Zeile:

    [autoit]

    $sRet = StringRegExpReplace($sRet, '.+?message.+\(.+\)\r\n', @LF) ; Yahoo-Support

    [/autoit]


    Damit ist die Rückgabe bei meinem Yahoo-Account genauso wie bei meinem 1und1-Account.
    Vielleicht möchtest Du die UDF entsprechend anpassen. :)

  • Fehlt nur noch eine Funktion, um den Anhang runterzuladen :D

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Ich habe ein Problem mit dieser UDF und T-Online Email,
    Über diesen Script

    Spoiler anzeigen
    [autoit]


    _POP3Connect("gehtdichnixandusauundjetztwischdentisch@t-online.de", "##########","popmail.t-online.de",110)
    _POP3Noop()
    $a = _POP3List()
    If Not IsArray($a) Then MsgBox(0,"","$a ist keine Array")
    _ArrayDisplay($a)
    _POP3Noop()
    $a_mails = _POP3Info()
    If Not IsArray($a_mails) Then MsgBox(0,"","$a_mails ist keine Array")
    _ArrayDisplay($a_mails)

    [/autoit]


    Ich bekomme zwar eine Verbindung, jedoch werden keine E-Mails angezeigt, obwohl welche in der Inbox sind,
    oder müssen sie noch nicht abgeholt sein?
    Rückgabe:

    Spoiler anzeigen


    Fliwatt