HTML Code verarbeiten

  • Vergleicht das Skript jetzt auch schon irgendwas? Ich habe nichts dazu gefunden...

    Sieht echt gut aus! :)

    Den Console write muss ich dann vergleich oder?
    Und e-Mail dann danach...

    Aber mit dem das es nicht wiederholt wenn der gleiche Text ausgegeben wird habe ich nicht gesehen macht er das schon oder nicht?

    Ist generell recht kompliziert wie ich finde... :)

  • So bitte:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <File.au3>

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

    Global $aTimetable[1][7][1], $aDay[1], $sText, $sLastText
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    Global $sSmtpServer = "mail.gmx.net"
    Global $sFromName = "AutoIt"
    Global $sFromAddress = "beispiel@gmx.de"
    Global $sToAddress = "beispiel@gmx.de"
    Global $sSubject = "Update Vertretungsplan"
    Global $sUsername = "Username z.B. beispiel@gmx.de"
    Global $sPassword = "Passwort"

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

    HotKeySet("{ESC}", "_Exit")

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

    AdlibRegister("_GetChart", 5000)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _GetChart()
    Local $sCol1 = " "
    Local $sCol2 = " "
    Local $sCol3 = " "
    Local $sCol4 = " "
    Local $sCol5 = " "
    Local $sCol6 = " "
    Local $sCol7 = " "
    Local $sSource = InetRead("http://tellkampf1.dyndns.org/Vertretungsplan_SuS/" & _WeekNumberISO() & "/w/w00021.htm")
    Local $iThirdDim = 0
    $sText = ""

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

    Local $aSB_1 = _StringBetween(BinaryToString($sSource), "<b>", "</b>")
    Local $aSB_2 = _StringBetween(BinaryToString($sSource), '<table class="subst" >', "</table>")

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

    For $i = 0 To UBound($aSB_2) - 1
    If StringInStr($aSB_2[$i], "Klasse")Then
    $iThirdDim += 1
    ReDim $aDay[$iThirdDim]
    $aDay[$iThirdDim - 1] = $aSB_1[$i]
    Local $aSB_3 = _StringBetween($aSB_2[$i], '" >', "</td>")
    ReDim $aTimetable[(UBound($aSB_3) / 7) + 1][7][$iThirdDim]
    $aTimetable[0][0][$iThirdDim - 1] = "Klasse(n)"
    $aTimetable[0][1][$iThirdDim - 1] = "Stunde"
    $aTimetable[0][2][$iThirdDim - 1] = "(Fach)"
    $aTimetable[0][3][$iThirdDim - 1] = "Vertreter"
    $aTimetable[0][4][$iThirdDim - 1] = "Fach"
    $aTimetable[0][5][$iThirdDim - 1] = "Raum"
    $aTimetable[0][6][$iThirdDim - 1] = "Art"
    For $k = 0 To UBound($aSB_3) - 1
    $aTimetable[Int($k / 7) + 1][$k - (Int($k / 7) * 7)][$iThirdDim - 1] = $aSB_3[$k]
    Next
    EndIf
    Next

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

    For $i = 0 To UBound($aDay) - 1
    $sText &= $aDay[$i] & @CRLF
    For $k = 0 To UBound($aTimetable) - 1
    $sText &= "|" & $aTimetable[$k][0][$i] & StringTrimLeft($sCol1, StringLen($aTimetable[$k][0][$i])) & "|"
    $sText &= $aTimetable[$k][1][$i] & StringTrimLeft($sCol2, StringLen($aTimetable[$k][1][$i])) & "|"
    $sText &= $aTimetable[$k][2][$i] & StringTrimLeft($sCol3, StringLen($aTimetable[$k][2][$i])) & "|"
    $sText &= $aTimetable[$k][3][$i] & StringTrimLeft($sCol4, StringLen($aTimetable[$k][3][$i])) & "|"
    $sText &= $aTimetable[$k][4][$i] & StringTrimLeft($sCol5, StringLen($aTimetable[$k][4][$i])) & "|"
    $sText &= $aTimetable[$k][5][$i] & StringTrimLeft($sCol6, StringLen($aTimetable[$k][5][$i])) & "|"
    $sText &= $aTimetable[$k][6][$i] & StringTrimLeft($sCol7, StringLen($aTimetable[$k][6][$i])) & "|" & @CRLF
    Next
    $sText &= @CRLF
    Next

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

    If $sLastText <> $sText Then
    $sLastText = $sText
    _SendEmail()
    EndIf
    EndFunc

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

    Func _SendEmail()
    _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sText, "", "", "", $sUsername, $sPassword)
    ConsoleWrite(">> Gesendet" & @CRLF)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Cc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($s_Body,"<") and StringInStr($s_Body,">") Then
    $objEmail.HTMLBody = $s_Body
    Else
    $objEmail.Textbody = $s_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
    Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
    For $x = 1 To $S_Files2Attach[0]
    $S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    Else
    $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
    SetError(1)
    return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Sent the Message
    $objEmail.Send
    if @error then
    SetError(2)
    return $oMyRet[1]
    EndIf
    EndFunc ;==>_INetSmtpMailCom

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

    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description,3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]


    Email Sachen einfach ändern.
    Im Moment prüft er alle 5 Sekunden die Seite, siehe AdlibRegister.

  • Vielen vielen dank...

    Ich werde es jetzt noch probieren zu verstehen und die Funktionen mit der Hilfe überprüfen damit ich was daraus lerne aber es sieht echt richtig gut aus!!!!

    Vielen dank

  • Habe ich noch nicht ausprobiert...

    Aber nachher!
    Ich schreibe dann ob es geht...

  • also ich habe es jetzt ausprobiert... habe zwei msgboxen eingebaut nur so zum überprüfen...

    also die abfrage geht ja noch denn dort kommt eine positive rückgabe also das der neue Text anders ist als der erste.. ist ja klar ist ja noch kein anderer hinterlegt... :)

    aber dann bei der e-mail kommt eine negative rückgabe...
    kp warum. ?(

    nochmal mit den msgboxen:

    [autoit]

    #include <Array.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <File.au3>

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

    Global $aTimetable[1][7][1], $aDay[1], $sText, $sLastText
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    Global $sSmtpServer = "mail.gmx.net"
    Global $sFromName = "AutoIt"
    Global $sFromAddress = "*********************"
    Global $sToAddress = "***************"
    Global $sSubject = "Update Vertretungsplan"
    Global $sUsername = "*********"
    Global $sPassword = "******"

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

    HotKeySet("{ESC}", "_Exit")

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

    AdlibRegister("_GetChart", 1000)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _GetChart()
    Local $sCol1 = " "
    Local $sCol2 = " "
    Local $sCol3 = " "
    Local $sCol4 = " "
    Local $sCol5 = " "
    Local $sCol6 = " "
    Local $sCol7 = " "
    Local $sSource = InetRead("http://tellkampf1.dyndns.org/Vertretungsplan_SuS/" & _WeekNumberISO() & "/w/w00021.htm")
    Local $iThirdDim = 0
    $sText = ""

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

    Local $aSB_1 = _StringBetween(BinaryToString($sSource), "<b>", "</b>")
    Local $aSB_2 = _StringBetween(BinaryToString($sSource), '<table class="subst" >', "</table>")

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

    For $i = 0 To UBound($aSB_2) - 1
    If StringInStr($aSB_2[$i], "Klasse")Then
    $iThirdDim += 1
    ReDim $aDay[$iThirdDim]
    $aDay[$iThirdDim - 1] = $aSB_1[$i]
    Local $aSB_3 = _StringBetween($aSB_2[$i], '" >', "</td>")
    ReDim $aTimetable[(UBound($aSB_3) / 7) + 1][7][$iThirdDim]
    $aTimetable[0][0][$iThirdDim - 1] = "Klasse(n)"
    $aTimetable[0][1][$iThirdDim - 1] = "Stunde"
    $aTimetable[0][2][$iThirdDim - 1] = "(Fach)"
    $aTimetable[0][3][$iThirdDim - 1] = "Vertreter"
    $aTimetable[0][4][$iThirdDim - 1] = "Fach"
    $aTimetable[0][5][$iThirdDim - 1] = "Raum"
    $aTimetable[0][6][$iThirdDim - 1] = "Art"
    For $k = 0 To UBound($aSB_3) - 1
    $aTimetable[Int($k / 7) + 1][$k - (Int($k / 7) * 7)][$iThirdDim - 1] = $aSB_3[$k]
    Next
    EndIf
    Next

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

    For $i = 0 To UBound($aDay) - 1
    $sText &= $aDay[$i] & @CRLF
    For $k = 0 To UBound($aTimetable) - 1
    $sText &= "|" & $aTimetable[$k][0][$i] & StringTrimLeft($sCol1, StringLen($aTimetable[$k][0][$i])) & "|"
    $sText &= $aTimetable[$k][1][$i] & StringTrimLeft($sCol2, StringLen($aTimetable[$k][1][$i])) & "|"
    $sText &= $aTimetable[$k][2][$i] & StringTrimLeft($sCol3, StringLen($aTimetable[$k][2][$i])) & "|"
    $sText &= $aTimetable[$k][3][$i] & StringTrimLeft($sCol4, StringLen($aTimetable[$k][3][$i])) & "|"
    $sText &= $aTimetable[$k][4][$i] & StringTrimLeft($sCol5, StringLen($aTimetable[$k][4][$i])) & "|"
    $sText &= $aTimetable[$k][5][$i] & StringTrimLeft($sCol6, StringLen($aTimetable[$k][5][$i])) & "|"
    $sText &= $aTimetable[$k][6][$i] & StringTrimLeft($sCol7, StringLen($aTimetable[$k][6][$i])) & "|" & @CRLF
    Next
    $sText &= @CRLF
    Next

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

    If $sLastText <> $sText Then
    $sLastText = $sText
    MsgBox (0,"Test","Hallo")
    _SendEmail()
    EndIf
    EndFunc

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

    Func _SendEmail()
    _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sText, "", "", "", $sUsername, $sPassword)
    ConsoleWrite(">> Gesendet" & @CRLF)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Cc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($s_Body,"<") and StringInStr($s_Body,">") Then
    $objEmail.HTMLBody = $s_Body
    Else
    $objEmail.Textbody = $s_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
    Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
    For $x = 1 To $S_Files2Attach[0]
    $S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    Else
    $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
    SetError(1)
    return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Sent the Message
    $objEmail.Send
    if @error then
    MsgBox (0,"E-mail","geht nicht")
    SetError(2)
    return $oMyRet[1]
    EndIf
    EndFunc ;==>_INetSmtpMailCom

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

    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description,3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]

    aber woran es jetzt liegt weiß ich nicht... ;(

  • Also ich habe dort ja eine msgbox eingebaut und die kommt halt erst wenn mail @error ist...
    Und diese msgbox kommt immer...
    Daraus schließe ich das die e-mail nicht geht?!

    Aber wo der Fehler liegt...keinen Schimmer

  • Du müsstest einen COM Error bekommen der in der Console angezeigt wird.
    Deine SMTP-Server stimmt, also du bist bei GMX?

    Einmal editiert, zuletzt von m-obi (9. Juni 2012 um 07:08)

  • Hab noch nen kleinen Bug bereinigt. Musste auch nun ne andere Klasse nehmen, also nicht wundern. Der Plan zu deiner ist schon weg.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <File.au3>

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

    Global $aTimetable[1][7][1], $aDay[1], $sText, $sLastText
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    Global $sSmtpServer = "mail.gmx.net"
    Global $sFromName = "AutoIt"
    Global $sFromAddress = "****@gmx.de"
    Global $sToAddress = "****@gmx.de"
    Global $sSubject = "Update Vertretungsplan"
    Global $sUsername = "****@gmx.de"
    Global $sPassword = "******"

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

    HotKeySet("{ESC}", "_Exit")

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

    AdlibRegister("_GetChart", 5000)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _GetChart()
    Local $sCol1 = " "
    Local $sCol2 = " "
    Local $sCol3 = " "
    Local $sCol4 = " "
    Local $sCol5 = " "
    Local $sCol6 = " "
    Local $sCol7 = " "
    Local $sSource = InetRead("http://tellkampf1.dyndns.org/Vertretungsplan_SuS/" & _WeekNumberISO() & "/w/w00017.htm")
    Local $iThirdDim = 0
    $sText = ""

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

    Local $aSB_1 = _StringBetween(BinaryToString($sSource), "<b>", "</b>")
    Local $aSB_2 = _StringBetween(BinaryToString($sSource), '<table class="subst" >', "</table>")

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

    For $i = 0 To UBound($aSB_2) - 1
    If StringInStr($aSB_2[$i], "Klasse")Then
    $iThirdDim += 1
    ReDim $aDay[$iThirdDim]
    $aDay[$iThirdDim - 1] = $aSB_1[$i]
    Local $aSB_3 = _StringBetween($aSB_2[$i], '" >', "</td>")
    ReDim $aTimetable[(UBound($aSB_3) / 7) + 1][7][$iThirdDim]
    $aTimetable[0][0][$iThirdDim - 1] = "Klasse(n)"
    $aTimetable[0][1][$iThirdDim - 1] = "Stunde"
    $aTimetable[0][2][$iThirdDim - 1] = "(Fach)"
    $aTimetable[0][3][$iThirdDim - 1] = "Vertreter"
    $aTimetable[0][4][$iThirdDim - 1] = "Fach"
    $aTimetable[0][5][$iThirdDim - 1] = "Raum"
    $aTimetable[0][6][$iThirdDim - 1] = "Art"
    For $k = 0 To UBound($aSB_3) - 1
    $aTimetable[Int($k / 7) + 1][$k - (Int($k / 7) * 7)][$iThirdDim - 1] = $aSB_3[$k]
    Next
    EndIf
    Next

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

    For $i = 0 To UBound($aDay) - 1
    $sText &= $aDay[$i] & @CRLF
    For $k = 0 To UBound($aTimetable) - 1
    $sText &= "|" & $aTimetable[$k][0][$i] & StringTrimLeft($sCol1, StringLen($aTimetable[$k][0][$i])) & "|"
    $sText &= $aTimetable[$k][1][$i] & StringTrimLeft($sCol2, StringLen($aTimetable[$k][1][$i])) & "|"
    $sText &= $aTimetable[$k][2][$i] & StringTrimLeft($sCol3, StringLen($aTimetable[$k][2][$i])) & "|"
    $sText &= $aTimetable[$k][3][$i] & StringTrimLeft($sCol4, StringLen($aTimetable[$k][3][$i])) & "|"
    $sText &= $aTimetable[$k][4][$i] & StringTrimLeft($sCol5, StringLen($aTimetable[$k][4][$i])) & "|"
    $sText &= $aTimetable[$k][5][$i] & StringTrimLeft($sCol6, StringLen($aTimetable[$k][5][$i])) & "|"
    $sText &= $aTimetable[$k][6][$i] & StringTrimLeft($sCol7, StringLen($aTimetable[$k][6][$i])) & "|" & @CRLF
    Next
    $sText &= @CRLF
    Next

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

    If $sLastText <> $sText And StringInStr($sText, "Klasse") Then
    $sLastText = $sText
    _SendEmail()
    EndIf
    EndFunc

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

    Func _SendEmail()
    _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sText, "", "", "", $sUsername, $sPassword)
    ConsoleWrite(">> Gesendet" & @CRLF)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject = "", $sBody = "", $sAttachFiles = "", $sCcAddress = "", $sBccAddress = "", $sUsername = "", $sPassword = "", $iPort = 25, $xSSL = False)
    Local $iError = 0, $iErrorDesciption = "", $aSS

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

    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $sFromName & '" <' & $sFromAddress & '>'
    $objEmail.To = $sToAddress
    If $sCcAddress <> "" Then $objEmail.Cc = $sCcAddress
    If $sBccAddress <> "" Then $objEmail.Cc = $sBccAddress
    $objEmail.Subject = $sSubject
    If StringInStr($sBody,"<") and StringInStr($sBody,">") Then
    $objEmail.HTMLBody = $sBody
    Else
    $objEmail.Textbody = $sBody & @CRLF
    EndIf
    If $sAttachFiles <> "" Then
    Local $aSS = StringSplit($sAttachFiles, ";")
    For $i = 1 To $aSS[0]
    $aSS[$i] = _PathFull($aSS[$i])
    If FileExists($aSS[$i]) Then
    $objEmail.AddAttachment($aSS[$i])
    Else
    $iErrorDesciption = $iErrorDesciption & @lf & 'File not found to attach: ' & $aSS[$i]
    SetError(1)
    return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $sSmtpServer
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $iPort
    ;Authenticated SMTP
    If $sUsername <> "" Then
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $sUsername
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $sPassword
    EndIf
    If $xSSL Then
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Sent the Message
    $objEmail.Send
    if @error then
    SetError(2)
    return $oMyRet[1]
    EndIf
    EndFunc ;==>_INetSmtpMailCom

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

    Func MyErrFunc()
    Local $HexNumber = Hex($oMyError.Number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.Description, 3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.Scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]
  • Eigentlich bin ich bei Web.de aber ich habe auch ein Konto bei gmx das habe ich jetzt einfach dafür benutz...

    Das Skript ohne Bug probiere ich gleich aus...

    Wo sehe ich denn die Konsole?
    Ich habe das ja mit der msgbox überprüft...

  • e-mail läuft!!!!
    super!!

    noch eine Frage: macht das programm jetzt auch schon ne schleife? oder soll ich die noch einfügen?
    denn es muss ja immer wieder starten und die seite überwachen...

    ist das mit adlibregister schon geschehen oder muss das noch hinzugefügt werden?

    echt vielen dank ist schon cool was man so mit Autoit alles machen kann...

  • Genau. AdLibRegister ist sozusagen die Schleife.
    Was hattest du denn bei der Mail vergessen oder falsch gemacht?

  • Ich weiß es wirklich nicht :)

    Keine Ahnung heute nochmal probiert und jetzt geht es... ;)

    Wee kann ich eigentlich noch weitere Empfänger hinzufügen? Z.B. Einen Freund?

    Einfach mit nem Komma bei empfänger noch einen rein schreiben?

  • Hier noch eine verbesserte Version.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>
    #include <Date.au3>

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

    Global $aTimetable[1][7][1], $aDay[1], $sText, $sLastText, $iSite, $sClass
    Global $aChartColWidth[7] = [23, 8, 8, 11, 8, 8, 12]
    Global $oMyRet[2], $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    Global $sSmtpServer = "mail.gmx.net"
    Global $sFromName = "AutoIt"
    Global $sFromAddress = "*******@gmx.de"
    Global $sToAddress = "*******@gmx.de, *******@yahoo.de"
    Global $sSubject = "Update Vertretungsplan"
    Global $sUsername = "*******@gmx.de"
    Global $sPassword = "*******"

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

    $sClass = InputBox("Vertretungsplan Grabber", "Wähle eine Klasse.", "", "", 200, 130)
    If $sClass = "" Then Exit

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

    $iSite = _SearchSite($sClass)
    If @error Then
    MsgBox(16, "Vertretungsplan Grabber", "Klasse nicht gefunden!")
    Exit
    EndIf

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

    HotKeySet("{ESC}", "_Exit")

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

    AdlibRegister("_GetChart", 1000)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _SearchSite($sClass)
    Local $sSource, $iSite, $aSB

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

    While 1
    $iSite += 1
    $sSource = InetRead("http://tellkampf1.dyndns.org/Vertretungsplan_SuS/" & _WeekNumberISO() & "/w/w" & StringFormat("%05s", $iSite) & ".htm")
    $aSB = _StringBetween(BinaryToString($sSource), "<BR><h2>", "</h2>")
    If @error Then Return SetError(1)
    If $aSB[0] = $sClass Then ExitLoop
    WEnd

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

    Return $iSite
    EndFunc

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

    Func _GetChart()
    Local $sSource = InetRead("http://tellkampf1.dyndns.org/Vertretungsplan_SuS/" & _WeekNumberISO() & "/w/w" & StringFormat("%05s", $iSite) & ".htm")
    Local $iThirdDim = 0
    $sText = ""

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

    Local $aSB_1 = _StringBetween(BinaryToString($sSource), "<b>", "</b>")
    Local $aSB_2 = _StringBetween(BinaryToString($sSource), '<table class="subst" >', "</table>")

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

    For $i = 0 To UBound($aSB_2) - 1
    If StringInStr($aSB_2[$i], "Klasse")Then
    $iThirdDim += 1
    ReDim $aDay[$iThirdDim]
    $aDay[$iThirdDim - 1] = $aSB_1[$i]
    Local $aSB_3 = _StringBetween($aSB_2[$i], '" >', "</td>")
    ReDim $aTimetable[(UBound($aSB_3) / 7) + 1][7][$iThirdDim]
    $aTimetable[0][0][$iThirdDim - 1] = "Klasse(n)"
    $aTimetable[0][1][$iThirdDim - 1] = "Stunde"
    $aTimetable[0][2][$iThirdDim - 1] = "(Fach)"
    $aTimetable[0][3][$iThirdDim - 1] = "Vertreter"
    $aTimetable[0][4][$iThirdDim - 1] = "Fach"
    $aTimetable[0][5][$iThirdDim - 1] = "Raum"
    $aTimetable[0][6][$iThirdDim - 1] = "Art"
    For $k = 0 To UBound($aSB_3) - 1
    $aTimetable[Int($k / 7) + 1][$k - (Int($k / 7) * 7)][$iThirdDim - 1] = $aSB_3[$k]
    Next
    EndIf
    Next

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

    For $i = 0 To UBound($aDay) - 1
    $sText &= $aDay[$i] & @CRLF
    For $k = 0 To UBound($aTimetable) - 1
    $sText &= "|" & _ItemFormatted($aTimetable[$k][0][$i], $aChartColWidth[0]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][1][$i], $aChartColWidth[1]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][2][$i], $aChartColWidth[2]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][3][$i], $aChartColWidth[3]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][4][$i], $aChartColWidth[4]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][5][$i], $aChartColWidth[5]) & "|"
    $sText &= _ItemFormatted($aTimetable[$k][6][$i], $aChartColWidth[6]) & "|" & @CRLF
    Next
    $sText &= @CRLF
    Next

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

    If $sLastText <> $sText And StringInStr($sText, "Klasse") Then
    $sLastText = $sText
    _SendEmail()
    EndIf
    EndFunc

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

    Func _ItemFormatted($sText, $iWidth)
    Return StringFormat("%-" & $iWidth & "." & $iWidth & "s", $sText)
    EndFunc

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

    Func _SendEmail()
    _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sText, "", "", "", "Hoch", $sUsername, $sPassword, 587, False)
    ConsoleWrite(">> Gesendet" & @CRLF)
    Exit
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject = "", $sBody = "", $sAttachFiles = "", $sCcAddress = "", $sBccAddress = "", $sImportance = "Normal", $sUsername = "", $sPassword = "", $iPort = 25, $xSSL = False)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $sFromName & '" <' & $sFromAddress & ">"
    $objEmail.To = $sToAddress
    If $sCcAddress <> "" Then $objEmail.Cc = $sCcAddress
    If $sBccAddress <> "" Then $objEmail.Bcc = $sBccAddress
    $objEmail.Subject = $sSubject
    If StringInStr($sBody, "<") and StringInStr($sBody, ">") Then
    $objEmail.HTMLBody = $sBody
    Else
    $objEmail.Textbody = $sBody & @CRLF
    EndIf
    If $sAttachFiles <> "" Then
    Local $aSS = StringSplit($sAttachFiles, ";")
    For $i = 1 To $aSS[0]
    $aSS[$i] = _PathFull($aSS[$i])
    If FileExists($aSS[$i]) Then
    $objEmail.AddAttachment($aSS[$i])
    Else
    ConsoleWrite("!> File not found to attach: " & $aSS[$i] & @LF)
    Return SetError(1)
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $sSmtpServer
    If Number($iPort) = 0 Then $iPort = 25
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $iPort
    ; Authenticated SMTP
    If $sUsername <> "" Then
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $sUsername
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $sPassword
    EndIf
    If $xSSL Then
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ; Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $sImportance
    Case "very high", "sehr hoch"
    $objEmail.Fields.Item("urn:schemas:mailheader:X-Priority") = 1
    Case "high", "hoch"
    $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "high"
    $objEmail.Fields.Item("urn:schemas:httpmail:priority") = 1
    $objEmail.Fields.Item("urn:schemas:mailheader:X-Priority") = 2
    Case "normal", "medium"
    $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "normal"
    $objEmail.Fields.Item("urn:schemas:httpmail:priority") = 0
    $objEmail.Fields.Item("urn:schemas:mailheader:X-Priority") = 3
    Case "low", "niedrig"
    $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "low"
    $objEmail.Fields.Item("urn:schemas:httpmail:priority") = -1
    $objEmail.Fields.Item("urn:schemas:mailheader:X-Priority") = 4
    Case "very low", "sehr niedrig"
    $objEmail.Fields.Item("urn:schemas:mailheader:X-Priority") = 5
    EndSwitch
    ; Update importance
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    $objEmail = ""
    If @error Then Return SetError(2, 0, $oMyRet[1])
    Return 1
    EndFunc ;==>_INetSmtpMailCom

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

    Func MyErrFunc()
    Local $HexNumber = Hex($oMyError.Number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.Description, 3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.Scriptline & " Description:" & $oMyRet[1] & @LF)
    Return SetError(1)
    EndFunc ;==>MyErrFunc

    [/autoit]


    Du kannst jetzt auch die Priorität der Email setzen und am Anfang bei $aChartColWidth die Breiten der Spalten angeben.

    Edit: Hab noch ne Abfrage am Anfang eingefügt, um die Klasse wählen zu können.

    Einmal editiert, zuletzt von m-obi (10. Juni 2012 um 11:01)