Problem beim auslesen einer e-mail

  • Hallöchen ich bin mal wieder bei autoit gelandet und will nun mal wieder nen bissel was schreiben...

    Bin jetzt gerade allerdings auf ein Problem gestoßen. zum abrufen der Mail von meinem GMX Konto benutze ich die pop UFD

    [autoit]

    TCPStartup()
    $pop3sock = _pop3_connect($server, $port, $user, $password)
    $pop3info = _pop3_info($pop3sock)
    MsgBox(0, "Ergebnis", "Auf dem Server sind " & $pop3info[0] & " E-Mails mit einer Größe von " & $pop3info[1] & " Bytes.")
    $mail = _pop3_getmailraw($pop3sock, 1, 1000)
    MsgBox (1,"",$sMsg)
    MsgBox(0, "E-Mail 1", $mail)
    IniWrite ("Mail","Mail","Mail",$mail)
    #_pop3_deletemail($pop3sock, 1)
    _pop3_disconnect($socket)

    [/autoit]


    Ich weiß das dies das Beispiel aus dem UDF Thread ist. Also er ruft mit meinen Login Daten die e-mails ab (es sind momentan nur 2) und gibt mir das auch aus mit Bytes usw. in der msgbox, die ja eigentlich den Inhalt darstelllen soll wird nichts angezeigt. Ich habe schon probiert $mail in eine Textdatei zu schreiben was auch nicht funktioniert hat.

    Weiß jemand was ich falsch mache und kann mir jemand helfen das zu verbessern?
    Danke!

  • Du hast das mit IniWrite falsch gemacht
    Hier ein Beispiel:

    [autoit]

    IniWrite("C:\Temp\myfile.ini", "section2", "key", "this is a new value")

    [/autoit]

    Du musst schon angeben in welcher ini es schreiben soll

  • Betreib halt mal ein wenig Debugging wenn du uns schon keinen Link zur UDF bzw. dem Thread der UDF postest...

    Lass dir alle Rückgabewerte und @error Codes der jeweiligen UDF Funktionen mit consolewrite ausgeben. Danach schaust du entweder in die Dokumentation der UDF, oder falls keine vorhanden ist in der UDF selbst nach was die zurückgegebenen @error Werte bedeuten. Was Debugging in eine Datei anbelangt solltest du außerdem eher filewrite verwenden, damit es keine Komplikationen mit der INI Struktur gibt.

  • Also ich habe jetzt mal die UDF im Spoiler:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Name: POP3 UDF
    ; Vorraussetzungen: TcpStartup () am Anfang des Skripts
    ; Beschreibung: Eine UDF um mit AutoIt auf einen POP3 Server zuzugreifen.
    ; Autor: Carsten8
    ;
    ;===============================================================================
    Global $csocket
    Global $sMsg
    ;===============================================================================
    ;
    ; Beschreibung: Verbindet sich zu einem POP3 Server und loggt sich ein.
    ; Parameter: $sServer - Adresse des Pop3-Servers
    ; $iPort - Port über den Verbunden werden soll (meistens 110)
    ; $sUser - Benutzername zum einloggen (bei ua. web.de ist es die E-Mail Adresse)
    ; $sPass - Passwort des E-Mail Accounts
    ; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
    ; Rückgabewerte: Erfolg: Gibt 1 zurück.
    ; Fehler: Gibt 0 zurück zu setzt @error:
    ; 1 = Timeout
    ; 2 = Server gab einen anderen Fehler zurück
    ; 3 = Konnte nicht zum Server verbinden (meist falsche Adresse oder Port)
    ; 4 = Benutzername und/oder Passwort falsch
    ;===============================================================================
    Func _pop3_connect($sServer, $iPort, $sUser, $sPass, $timeout = 10000)
    $csocket = TCPConnect($sServer, $iPort)
    If @error = 1 Then
    $csocket = TCPConnect(TCPNameToIP($sServer), $iPort)
    EndIf
    If $csocket = -1 Then
    SetError(3)
    Return 0
    EndIf
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(1)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    Until StringLeft($Recv, 3) = "+OK"
    TCPSend($csocket, "USER " & $sUser & @CRLF)
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(1)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    Until StringLeft($Recv, 3) = "+OK"
    TCPSend($csocket, "PASS " & $sPass & @CRLF)
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(1)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    If StringLeft($recv, 4) = "-ERR" Then
    SetError(4)
    Return 0
    EndIf
    Until StringLeft($Recv, 3) = "+OK"
    Return $csocket
    EndFunc
    ;===============================================================================
    ;
    ; Beschreibung: Gibt die Anzahl und die Größe der E-Mails auf dem Server zurück
    ; Parameter: $socket - Serversocket
    ; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
    ; Rückgabewerte: Erfolg: Setzt @error auf 0 und gibt ein Array mit folgenden Daten zurück:
    ; $array[0] = Anzahl der E-Mails
    ; $array[1] = Größe aller E-Mails in Bytes
    ; Fehler: Setzt @error auf 1 bei einem unbekannten Fehler (2 bei Timeout und gibt 0 zurück)
    ; und gibt den vom Server gesendeten Fehler zurück.
    ;===============================================================================
    Func _pop3_info($socket, $timeout = 10000)
    TCPSend($socket, "STAT" & @CRLF)
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(2)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    If StringLeft($recv, 4) = "-ERR" Then
    SetError(4)
    Return $recv
    EndIf
    Until StringLeft($Recv, 3) = "+OK"
    $sTrim = StringTrimLeft($recv, 4)
    $split = StringSplit($sTrim, " ")
    Dim $aStat[2]
    $aStat[0] = $split[1]
    $aStat[1] = $split[2]
    Return $aStat
    EndFunc
    ;===============================================================================
    ;
    ; Beschreibung: Empfängt eine E-Mail mit ihrem Header
    ; Parameter: $socket - Serversocket
    ; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
    ; $iMail - Die Nummer der E-Meil zum Empfangen
    ; Rückgabewerte: Erfolg: Gibt die E-Mail zurück
    ; Fehler: Gibt 0 zurück und setzt @error bei einem Timeout auf 1 (bei anderen Fehlern 0)
    ;===============================================================================
    Func _pop3_getmailraw($socket, $iMail, $timeout = 10000)
    TCPSend($socket, "RETR " & $iMail & @CRLF)
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(1)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    If StringLeft($recv, 4) = "-ERR" Then
    SetError(0)
    Return 0
    EndIf
    Until StringLeft($recv, 3) = "+OK"
    $split = StringSplit($recv, @CRLF)
    For $i = 2 to $split[0] - 1
    $sMsg &= $split[$i] & @CRLF
    Next
    Return $sMsg
    EndFunc
    ;===============================================================================
    ;
    ; Beschreibung: Löscht eine E-Mail vom Server
    ; Parameter: $socket - Serversocket
    ; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
    ; $iMail - Die Nummer der E-Meil zum Empfangen
    ; Rückgabewerte: Erfolg: Gibt 1 zurück
    ; Fehler: Gibt 0 zurück und setzt @error bei einem Timeout auf 1 (bei anderen Fehlern 0)
    ;===============================================================================
    Func _pop3_deletemail($socket, $iMail, $timeout = 10000)
    TCPSend($socket, "DELE " & $iMail & @CRLF)
    $iTimer = TimerInit ()
    Do
    If TimerDiff ($iTimer) > $timeout Then
    SetError(1)
    Return 0
    EndIf
    $recv = TCPRecv($csocket, 1024)
    If StringLeft($recv, 4) = "-ERR" Then
    SetError(0)
    Return 0
    EndIf
    Until StringLeft($recv, 3) = "+OK"
    Return 1
    EndFunc
    ;===============================================================================
    ;
    ; Beschreibung: Trennt die Verbindung zum Server
    ; Parameter: $socket - Serversocket
    ; Rückgabewerte: Keine
    ;===============================================================================
    Func _pop3_disconnect($socket)
    TCPSend($socket, "QUIT" & @CRLF)
    TCPCloseSocket($socket)
    EndFunc

    [/autoit]

    also ich habe jetzt mal die @error Werte überprüft aber es kommt kein Fehler. Liegt das vielleicht am Format der Daten die an die MsgBox gegeben werden?

  • So ich habe nochmal nen bisschen weiter probiert.

    pop3_getmailraw gibt anscheinend ein Array zurück. Wie kann ich dies z.B. in einer .txt darstellen lassen?
    und wie kann ich das dann weiter verarbeiten?

  • Hi,
    zunächst würde ich mir per

    [autoit]

    _arraydisplay()

    [/autoit]

    mal anschauen was die Funktion zurückgibt.

  • Also habe mir nochmal die gleiche UDF von jemand anderem angesehen und dort wird halt nen Array zurückgegeben.
    Mit Arraydisplay kann ich nochmal probieren.

    Oder mache irgendetwas anderes flasch?

  • Klar habe ich mir die von Carsten angeguckt. Habe dann als es irgendwie nicht ging ht nichmal die andere angesehen und dachte Carsten hätte das vielleicht nicht vollständig aufgeschrieben.

    Hast du vielleichf eine Idee wie ich den Inhalt meiner Mails (also die Anzahl auf dem Server und die Byres werden ja bestimmt verbunden bin ich also) z.B in eine .txt speichern kann?

  • Nein, da ich nicht weiß welche UDF du benutzt und wie diese die Mail zurückgibt.
    Wenn du die von Carsten benutzt dann sollte sie den Inhalt der Mail als String zurückgeben, da das aber anscheinend nicht funktioniert weiß ich auch nicht weiter.

    Du könntest auch mal versuchen die Mail manuell mit Telnet auszulesen (die Befehle stehen ja z.B. in der UDF) und schauen, was dir in der Konsole ausgegeben wird.

  • Also nochmal von vorne...

    mit dieser UDF (ist jetzt ne andere mit der geht es)

    Spoiler anzeigen

    und diesem Beispiel Skript:

    Spoiler anzeigen
    [autoit]

    #include <pop3 udf2.au3>
    #include <array.au3>

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

    ConsoleWrite(@AutoItVersion & @CRLF)
    ;~ See _pop3.au3 for a complete description of the pop3 functions
    ;~ Requires AU3 beta version 3.1.1.110 or newer.

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

    Global $MyPopServer = "pop.gmx.de"
    Global $MyLogin = "**********@gmx.de"
    Global $MyPasswd = "***************"

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

    _pop3Connect($MyPopServer, $MyLogin, $MyPasswd)
    If @error Then
    MsgBox(0, "Error", "Unable to connect to " & $MyPopServer & @CR & @error)
    Exit
    Else
    ConsoleWrite("Connected to server pop3 " & $MyPopServer & @CR)
    EndIf

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

    Local $stat = _Pop3Stat()
    If Not @error Then
    _ArrayDisplay($stat, "Result of STAT COMMAND")
    Else
    ConsoleWrite("Stat commande failed" & @CR)
    EndIf

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

    ;~ Local $list = _Pop3List()
    ;~ If Not @error Then
    ;~ _ArrayDisplay($list, "")
    ;~ Else
    ;~ ConsoleWrite("List commande failed" & @CR)
    ;~ EndIf

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

    ;~ Local $noop = _Pop3Noop()
    ;~ If Not @error Then
    ;~ ConsoleWrite($noop & @CR)
    ;~ Else
    ;~ ConsoleWrite("List commande failed" & @CR)
    ;~ EndIf

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

    ;~ Local $uidl = _Pop3Uidl()
    ;~ If Not @error Then
    ;~ _ArrayDisplay($uidl, "")
    ;~ Else
    ;~ ConsoleWrite("Uidl commande failed" & @CR)
    ;~ EndIf

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

    Local $top = _Pop3Top(1, 0)
    If Not @error Then
    ConsoleWrite(StringStripCR($top) & @CR)
    Else
    ConsoleWrite("top commande failed" & @CR)
    EndIf

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

    ;~ Local $retr = _Pop3Retr(1)
    ;~ If Not @error Then
    ;~ ConsoleWrite(StringStripCR($retr) & @CR)
    ;~ Else
    ;~ ConsoleWrite("Retr commande failed" & @CR)
    ;~ EndIf

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

    ;~ Local $dele = _Pop3Dele(1)
    ;~ If Not @error Then
    ;~ ConsoleWrite($dele & @CR)
    ;~ Else
    ;~ ConsoleWrite("Dele commande failed" & @CR)
    ;~ EndIf

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

    ConsoleWrite(_Pop3Quit() & @CR)
    _pop3Disconnect()

    [/autoit]

    bekomme ich dies:

    Spoiler anzeigen

    3.3.10.2
    Connected to server pop3 pop.gmx.de
    Return-Path: *****************************@me.com
    Received: from st11p06mm-asmtp002.mac.com ([17.172.124.250]) by mx-ha.gmx.net
    (mxgmx101) with ESMTP (Nemesis) id 0Mgd3b-1VnmEs07kN-00Ny03 for
    <paidmailerUSP@gmx.de>; Mon, 06 Jan 2014 19:24:53 +0100
    Received: from [192.168.178.23] (p5DC60F9E.dip0.t-ipconnect.de [93.198.15.158])
    by st11p06mm-asmtp002.mac.com
    (Oracle Communications Messaging Server 7u4-27.08(7.0.4.27.7) 64bit (built Aug
    22 2013)) with ESMTPSA id <0MYZ004CQSGYMXA0@st11p06mm-asmtp002.mac.com> for
    *************************@gmx.de; Mon, 06 Jan 2014 10:24:38 -0800 (PST)
    X-Proofpoint-Virus-Version: vendor=fsecure
    engine=2.50.10432:5.11.87,1.0.14,0.0.0000
    definitions=2014-01-06_03:2014-01-06,2014-01-06,1970-01-01 signatures=0
    X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0
    suspectscore=0 phishscore=0 adultscore=0 bulkscore=1 classifier=spam adjust=0
    reason=mlx scancount=1 engine=7.0.1-1308280000 definitions=main-1401060112
    Subject: Test
    From: Bastian Matthies <****************@me.com>
    Content-type: text/plain; charset=utf-8
    X-Mailer: iPhone Mail (11B554a)
    Message-id: <0****************************@me.com>
    Date: Mon, 06 Jan 2014 19:24:34 +0100
    To: "******************************+@gmx.de" <************@gmx.de>
    Content-transfer-encoding: quoted-printable
    MIME-version: 1.0 (1.0)
    Envelope-To: <************************@gmx.de>
    X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3;
    X-GMX-Antivirus: 0 (no virus found)
    X-UI-Filterresults: notjunk:1;V01:K0:++dwIhiOu2M=:1E98unKnjA/niH1B/DBFOGV9j8
    NbVFRmXFvJdEvB2DR7eCzDlYF8k7FeynJ6eObJ6QkdoOE7hYEENLDBhGyDcyjhIDPwv8747yD
    2xI8Lx5lXgmfauSeSqKECE6p6RqjWxWEwUnPttPRmnJq1b2LgBAn1YAy2iGSfmGvnz2LKu6EM
    liPPZ5mGdE5AwtHd1iKGEQzxY3Uw8oAILYBiTtLefE/18IyR8eYYcoP0JUaz6MjSUevU8e8/z
    fBO3m60ccrodgTQDzjEoEuFfWETnRQB2n9p1CWjoDYN8SGDT99w9pmypGuf/SmRSqWV1QCYgO
    FOu58dDgsjgInGdNM+nP6DHsRR1KwdPDAlKUjRaoSY86oJkXsnurq85DDtTEIphhfuv7DWUa3
    Ac6DbSMBscarYX+c8VwDk2+pQrQ+8krZTTZQBa1GoZl9pejaVJY7100luDkehrv9pbnGm9O/Y
    Wi7UONMMqCsYK8U19aSN9Le/+zkmxQxlyMU9NYOo9xsLx95VquhaZk6zlzA59sTfjuUn18p7c
    MlRyO67GAodnSM7rfJ1s7OOteE7Qe8tP90aAGNoJd60CU2t1PrAmNQXM8doddS7wMYsvjpzSS
    Uyfa80+dIGsKvmSkx51VAnrJRdsbBhsYe8fpm7prvWo/wV6GVMuBCJcMM4agpRj78mgxu3f3W
    hDStsh1Nyiw/x07YQQhCcJXSxdhvtJbvK57YOJad6RXqX5H6+FoQKly3ji1Tx7qyw3Ybn8Usz
    a9hSTHofrrb2dEi+C2yxfT8mYsy7jvZNYcdVC+iYSc+QhsVgUXsFjDYwtPWjaROtROrBUntJ6
    Wk+vgS/pJKyQESB0PkcG6xUd/9Jp6DgnISKAIEt+4+vnBIpj7Gi458j3UizwM0/RG9uIT/BDG
    cap/xPvEOwrIGA+HI0mM94enxQDc2PlNvFmaLOdv82YpXhJ24aISUBOo6H+912QOJyQxt5QK6
    ozjuFBgWq15RrZeCbiKaOI8jT0f3ShWJWkYi+JcTHXbwDIRPIY5Ld2KElvwwGJpH1sEQf6BeW
    gOTVW+Mjtm9okJRa39qxmPsCnfblhSHcK+p1onXZ8RUVyvU2R7VY1GCfvHmwfHDVU+TjhQEiD
    M3ESRQZq81ZTyuC8NuE3knI/5VQQcP8K4TO53wk7ZigUy0fUqIiG3NeZVP3AtqoPBvlqImHm4
    TZmPJHuAxVivsqSZO095x6rN3nfTlpXFvCnb8FRIvkhXlbT+5huaI35gLwlN56WMnDT+xZoJe
    9PDMP8gTTaCgSEhncu4/9s7DYVNvJDls5JRGZel/cxf8HRxiK39arHNhKKnNpvq2w+fuO0M9A
    aPxbPmuJeeav0rMAT1u3z5dfDCjANSWTBpqCAyy1j5yAfVh23NmbzRMUQkwcqI+P/+w2Fyiph
    OhZRnjKnz1xWOKjHg==

    .

    +OK POP server signing off

    >Exit code: 0 Time: 7.186

    also das Programm läuft komplett durch und sowohl Absender als auch Betreff werden richtig angezeigt. Nur der Text wird halt leider total verschlüsselt angezeigt.

    Weiß jemand was ich da machen kann?

  • [autoit]

    Local $top = _Pop3Top(1, 0)
    ; Sting _Pop3Top(msg_number, lines) ; Retreives the mail headers, and the X first lines of the message. Or returns -1 and sets @error.

    [/autoit]
  • Ja ok also die Funktion habe ich ja aktiviert und die bringt mir ja auch diese verschlüsselte Nachricht.

    Hat irgendwer ne idee odern nen funktionierendes skript welches die Mails lädt und den Text richtig anzeigt?
    Danke

    Einmal editiert, zuletzt von Gandalf (6. Januar 2014 um 22:28)

  • Woran happerts denn? Keine Lust dich 2min mit der Dokumentation der UDF Funktionen auseinanderzusetzen? Mangelnde Englischkenntnisse? Mangelnde Erfahrung in der richtigen Anwendung von Funktionen und deren Parametern?

    Wie dem auch sei... was ich dir mit meinem Post sagen wollte war mehr oder weniger, dass Lesen hilft. Die von dir genutzte Funktion _Pop3Top() gibt dir nur dann den Inhalt der Email zurück wenn du den 2. Funktionsparameter entsprechend setzt. Sofern es an deinem Englisch liegt hier die Übersetzung der Funktionsbeschreibung:

    Zitat

    Sting _Pop3Top(msg_number, lines) --> Retreives the mail headers, and the X first lines of the message. Or returns -1 and sets @error.

    Empfängt den Mail Header und die ersten X Zeilen der Emailnachricht. Im Fehlerfall gibt die Funktion den Wert -1 zurück und setzt das Makro @error
    X steht hierbei für den 2. Parameter "lines", also die Anzahl der zu lesenden Zeilen der Emailnachricht.

    Da du den 2. Parameter in deinem Testscript auf den Wert 0 gesetzt hast wird die Funktion keine einzige Zeile der eigentlichen Email, sondern nur den Email Header zurückgeben.

    Demzufolge würde folgender Funktionsaufruf den Emailheader und die ersten 5 Zeilen der Nachricht zurückgeben:

    [autoit]

    Local $top = _Pop3Top(1, 5)

    [/autoit]

    Die Frage ist aber ob dich der Emailheader überhaupt interessiert. Wenn nicht ist vielleicht die Funktion _Pop3Retr() eher das was du suchst.


    Du hast es zwar editiert, aber da du vorhin meintest manchmal würde es garnicht mehr funktionieren... die meisten Freemail Anbieter haben Limits was die Häufigkeit der POP Abrufe anbelangt. Bei web.de sind es glaube ich 5min. bei GMX sogar 10min. Du wirst also ggf. etwas warten müssen bevor du erneut testen kannst. Alternativ teste mit einer Emailadresse die keine derartige Limitierung besitzt, z.B. eigene Domain oder bezahlte Emailadresse.

    Einmal editiert, zuletzt von misterspeed (7. Januar 2014 um 00:06)

  • Also naja mein Englisch ist nicht das beste aber für autoit reichts.

    Also ich kann mir jetzt den Text der Mail ausgeben lassen (es lag wohl an den Mails manche gehen manche irgendwie nicht.
    Ja ich kenne Stringstr usw. Ich weiß allerdings nicht wie ich nur z.B. Viele Grüße aus der Mail ausschneide und seperat ausgebe.

    Aber erstmal vielen Danke! Jetzt geht es ja erstmal soweit.

  • Noch eine Sache...
    ich will innerghalb der Gui auf den Button auf einer Website klicken ohne die maus zu nutzen...
    der iexplorer ist innerhalb der gui. (Läuft schon)
    Leider ist dies alles was ich über den Button rausfinden konnte.
    Gibt es eine möglichkeit diesen Button zu klicken?

    <a href="javascript:openEAPopUp()"><span style="color:#F4F4F4">**********************</span></a>

    <td style="background-image:URL(gfx/frame/********.jpg)" align="center" width="220"><a href="javascript:openEAPopUp()"><span style="color:#F4F4F4">******************</span></a></td>


    Danke!