IE.au3 - GMX eMailPostfach auslesen

  • Problembeschreibung: Der Inhalt der Emails im gmx-Postfach soll in Abhängigkeit des Absenders ausgelesen werden.


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

    Func GMXeMailsAbfragen($username, $password, $absender)

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

    ; Erstellt eine Instanz (neues Fenster) des InternetExplorers und gibt ein entsprechendes Objekt zurück.

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

    Local $oGMX = _IECreate ("http://www.gmx.net/")

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

    ; warten bis die Seite komplett geladen wurde

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

    _IELoadWait($oGMX)

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

    ; gesuchtes Formular für Login

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

    Local $oForm = _IEGetObjById($oGMX, "formLoginFreemail")

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

    ; Erzeugen eines Formularfeld-Objekts mit Hilfe des Feldnamens

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

    Local $oUsername = _IEFormElementGetObjByName($oForm, "id")

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

    ; Setzen des Formularfeldinhalts

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

    _IEFormElementSetValue($oUsername, $username)

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

    ; Erzeugen eines Formularfeld-Objekts mit Hilfe des Feldnamens

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

    Local $oPasswd = _IEFormElementGetObjByName($oForm, "p")

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

    ; Setzen des Formularfeldinhalts

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

    _IEFormElementSetValue($oPasswd, $password)

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

    ; Absenden des Formulars

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

    _IEFormSubmit($oForm, 0)

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

    _IELoadWait($oGMX)

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

    ; Die Links befinden sich im ersten Frame des Browserfensters

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

    $oGMXFrame = _IEFrameGetCollection ($oGMX, 0)

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

    ; navigiere zum Mailordner und öffne eMail

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

    _IELinkClickByText($oGMXFrame, "Mein GMX")

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

    _IELinkClickByPartText($oGMXFrame, "ungelesene E-Mail")

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

    _IELinkClickByText($oGMXFrame, $absender)

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

    ; email auslesen

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

    Local $oGMXFrameMail = _IEFrameGetCollection($oGMXFrame,1)

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

    MsgBox(0,"Text",_IEBodyReadText($oGMXFrameMail))

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

    EndFunc

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

    ; von mir adaptierte version von _IELinkClickByText

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

    Func _IELinkClickByPartText(ByRef $o_object, $s_linkText, $i_index = 0, $f_wait = 1)

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

    If Not IsObj($o_object) Then

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

    __IEErrorNotify("Error", "_IELinkClickByText", "$_IEStatus_InvalidDataType")

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

    Return SetError($_IEStatus_InvalidDataType, 1, 0)

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

    EndIf

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

    ;

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

    Local $found = 0, $linktext, $links = $o_object.document.links

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

    $i_index = Number($i_index)

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

    For $link In $links

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

    $linktext = $link.outerText & "" ; Append empty string to prevent problem with no outerText (image) links

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

    If StringInStr($linktext , $s_linkText) Then

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

    If ($found = $i_index) Then

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

    $link.click

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

    If $f_wait Then

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

    _IELoadWait($o_object)

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

    Return SetError(@error, 0, -1)

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

    EndIf

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

    Return SetError($_IEStatus_Success, 0, -1)

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

    EndIf

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

    $found = $found + 1

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

    EndIf

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

    Next

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

    __IEErrorNotify("Warning", "_IELinkClickByText", "$_IEStatus_NoMatch")

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

    Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both

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

    EndFunc

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


    an der stelle

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

    ; email auslesen

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

    Local $oGMXFrameMail = _IEFrameGetCollection($oGMXFrame,1)

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

    MsgBox(0,"Text",_IEBodyReadText($oGMXFrameMail))

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

    Gibt mir Scite folgende Fehlermeldung zurück und das Programm terminiert -.-

    Code
    [...]\Include\IE.au3 (1964) : ==> The requested action with this object has failed.:
    
    
    Return SetError($_IEStatus_Success, 0, $o_object.document.body.innerText)
    
    
    Return SetError($_IEStatus_Success, 0, $o_object.document^ ERROR
    
    
    ->22:30:29 AutoIT3.exe ended.rc:1


    Bis jetzt verwende ich folgenden workaround:

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

    Local $oGMXMail

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

    Local $iframes = _IETagNameGetCollection($oGMXFrame, "iframe")

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

    For $iframe in $iframes

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

    If StringInStr($iframe.src, "http://www.gmxattachments.net/") Then

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

    $oGMXMail = _IECreate($iframe.src)

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

    ExitLoop

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

    EndIf

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

    Next

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


    Hat von euch jemand eine Idee warum der Code nicht so funktioniert, wie er sollte? Vielen dank schonmal an alle die sich daran versuchen ^^

    Viele Grüße Zim

    Einmal editiert, zuletzt von zim (26. August 2010 um 00:24)

  • Vielen Dank für die schnelle Antwort und die Links AutoBert ^^
    Bislang habe ich mich ganz gut mit der mitgelieferten Referenz und den paar kleinen tuts gut zurecht gefunden. Die Links werde ich mir trotzdem bald mal zu Gemüte führen. AutoIt ist wirklich ein verdammt mächtiges Tool...

    Zurück zum Thema. Den "umständlchen Weg" gehe ich weil der Inhalt automatisch weiterverarbeitet werden soll. Dabei hilft mir das Programm, zu dem du mir den Link geschickt hast nicht. Die Skripte von POP-Show zu modifizieren um meinen Ansprüchen gerecht zu werden klingt für mich nach nem ziemlichen Overkill des Teilproblems. Nach meinen bescheidenen Kenntnissen, was die DOM Referenz und Autoit betrifft, liegt das Problem bei den verschachtelten iframes, deren Referenzen irgendwie nicht richtig lokalisiert werden können. Das sind aber auch nur Vermutungen :(

    Wenn sich jemand die Mühe machen würde um das ganze einmal zu testen um dem Problem auf die Spur zu kommen wäre ich sehr dankbar.

    Viele Grüße Zim

  • Zurück zum Thema. Den "umständlchen Weg" gehe ich weil der Inhalt automatisch weiterverarbeitet werden soll. Dabei hilft mir das Programm, zu dem du mir den Link geschickt hast nicht. Die Skripte von POP-Show zu modifizieren um meinen Ansprüchen gerecht zu werden klingt für mich nach nem ziemlichen Overkill des Teilproblems.

    Du sollst ja nicht @Oscars Pop-Show anpassen, sondern anhand dieses Programmes die Einsatzmöglichkeiten der Pop.au3 von @Stigar nd @Luc HENNINOT (warscheins EN-Forum) kennenlernen und danach ein eigenes Skript nach deinen Bedürfnissen stricken.

    Bei der Automatisierung des IEs kann ich dir leider nicht helfen,

    ,mfh autoBert


  • Du sollst ja nicht @Oscars Pop-Show anpassen, sondern anhand dieses Programmes die Einsatzmöglichkeiten der Pop.au3 von @Stigar nd @Luc HENNINOT (warscheins EN-Forum) kennenlernen und danach ein eigenes Skript nach deinen Bedürfnissen stricken.

    Klingt nach einer hervorragenden Idee, vielen dank AutoBert =)

  • Vielen Dank euch allen für die Hilfe und ganz besonders an Oscar für den Link. Werd mich die Tage mal damit beschäftigen =D
    Solang keine neuen Fragen auftauchen setz ich den Thread mal auf "gelöst"

    Viele Grüße,
    Zim