#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_outfile=sende_email.exe #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_Change2CUI=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;Konstanten Global Const $GUI_EVENT_CLOSE = -3 Global Const $GUI_CHECKED = 1 Global Const $GUI_ENABLE = 64 Global Const $GUI_DISABLE = 128 Global $anhang_new, $flag, $read_txt, $file, $von, $wichtig, $ssl, $Cmd[15] Global $oMyRet[2] Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") Switch $CmdLine[0] Case 0 gui() Case 1 Switch $CmdLine[1] Case "/?", "?", "-?", "help", "-help", "/help" Exit mbparam(0) Case "gui", "/gui", "-gui" gui() EndSwitch Case 2 To 4 Exit mbparam(2) Case 5 To 14 For $i = 1 To 5 If $CmdLine[$i] = "" Then Exit mbparam(1) Next Case 15 To 1000 Exit mbparam(3) Case Else Exit mbparam(1) EndSwitch For $i = 1 To $CmdLine[0] $Cmd[$i] = $CmdLine[$i] Next For $i = $CmdLine[0]+1 To 14 $Cmd[$i] = "" Next If FileExists(_PathFull($Cmd[5])) Then $read_txt = FileOpen($Cmd[5],0) $Cmd[5] = FileRead($read_txt) FileClose($read_txt) EndIf Global $oMyRet[2] Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") $rc = _INetSmtpMailCom($Cmd[1], $Cmd[2], $Cmd[3], $Cmd[4], $Cmd[5], $Cmd[6], $Cmd[7], $Cmd[8], $Cmd[9], $Cmd[10], $Cmd[11], $Cmd[12], $Cmd[13], $Cmd[14]) If @error Then ConsoleWrite("Fehler beim Versenden der Nachricht"&@CRLF&"Fehlercode: " & @error & " Beschreibung: " & $rc & @CRLF) SetError(1) Else ConsoleWrite(@CRLF&"Die Nachricht an "&$Cmd[2]&" wurde erfolgreich versendet." & @CRLF) SetError(0) EndIf Exit #cs _InetSmtpMailCom ist ein Script von "Jos" aus dem engl. Forum von AutoIt: http://www.autoitscript.com/forum/index.php?showtopic=23860&hl=_InetSmtpMailCom #ce Func _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $IPPort = 25, $ssl = 0) Local $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.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringLeft($as_Body,6) = "" And StringRight($as_Body,7) = "" Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf If $s_AttachFiles <> "" Then Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") For $x = 1 To $S_Files2Attach[0] $S_Files2Attach[$x] = StringReplace($S_Files2Attach[$x],'"','') If FileExists($S_Files2Attach[$x]) Then $objEmail.AddAttachment ($S_Files2Attach[$x]) If @error = 0 Then ConsoleWrite("Datei erfolgreich angehaengt: "&$S_Files2Attach[$x] & @CRLF) Else ConsoleWrite('!> Dateianhang wurde nicht gefunden: ' & $S_Files2Attach[$x] & @LF) 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 If Number($IPPort) = 0 then $IPPort = 25 $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 ; Set Email Importance Switch $s_Importance Case "Hoch", "hoch" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High" Case "Normal", "normal" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal" Case "Niedrig", "niedrig" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low" EndSwitch $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf $objEmail="" EndFunc ;==>_INetSmtpMailCom ; Func gui() Global $gui[22] $wichtig = "Normal" $ssl = 0 $gui[0] = GUICreate("sende Email", 700, 550, 193, 115) GUICtrlCreateLabel("Von", 8, 10, 23, 17) GUICtrlCreateLabel("An", 8, 35, 17, 17) GUICtrlCreateLabel("[Cc]", 8, 60, 18, 17) GUICtrlCreateLabel("[Bcc]", 8, 85, 25, 15) GUICtrlCreateLabel("[Absender-Name]", 340, 10, 90, 17) GUICtrlCreateLabel("Smtp-Server", 340, 35, 62, 17) GUICtrlCreateLabel("[Anmeldename]", 340, 60, 80, 17) GUICtrlCreateLabel("[Passwort]", 340, 85, 55, 17) GUICtrlCreateLabel("[Priorität]", 8, 114, 57, 17) GUICtrlCreateLabel("[Ip-Port]", 340, 114, 45, 17) GUICtrlCreateLabel("[Ssl]", 507, 114, 24, 17) GUICtrlCreateLabel("Betreff", 8, 141, 35, 17) GUICtrlSetTip(-1,"Betreff:"&@CRLF&"Tragen Sie hier den Betreff Ihrer Email ein") GUICtrlCreateLabel("Nachricht", 8, 181, 50, 17) GUICtrlSetTip(-1,"Nachricht:"&@CRLF&"hier tragen Sie den Inhalt Ihrer Email ein"&@CRLF&"wenn der Text HTML-formatiert ist, dann wird dieser als HTML-Email versendet"&@CRLF&"dazu muss der Inhalt von '...' eingeschlossen sein."&@CRLF&"eine logische Prüfung der HTML-Konformität erfolgt nicht!!!") GUICtrlCreateLabel("[Anhang]", 8, 465, 70, 17) $gui[1] = GUICtrlCreateInput("", 66, 6, 250, 20); Von GUICtrlSetTip(-1,"Von:"&@CRLF&"Geben Sie hier Ihre Email-Adresse an") $gui[2] = GUICtrlCreateInput("", 66, 33, 250, 20); An GUICtrlSetTip(-1,"An:"&@CRLF&"Geben Sie hier die Email-Adresse des Empfängers an") $gui[3] = GUICtrlCreateInput("", 66, 58, 250, 20); CC GUICtrlSetTip(-1,"CC:"&@CRLF&"Geben Sie hier die Email-Adresse/n der CC-Empfänger an"&@CRLF&"mehrere Empfänger müssen mit ';' getrennt werden") $gui[4] = GUICtrlCreateInput("", 66, 83, 250, 20); BCC GUICtrlSetTip(-1,"BCC:"&@CRLF&"Geben Sie hier die Email-Adresse/n der BCC-Empfänger an"&@CRLF&"mehrere Empfänger müssen mit ';' getrennt werden") $gui[5] = GUICtrlCreateInput("", 434, 7, 250, 20); Absender-Name GUICtrlSetTip(-1,"Absendername:"&@CRLF&"Geben Sie hier den anzuzeigenden Namen an"&@CRLF&"i.d.R. wird dies Ihr Vor- und Nachname sein") $gui[6] = GUICtrlCreateInput("", 434, 34, 250, 20); Smtp-Server GUICtrlSetTip(-1,"Smtp-Server:"&@CRLF&"Geben Sie hier den Smtp-Server Ihres Email-Postfaches ein") $gui[7] = GUICtrlCreateInput("", 434, 59, 250, 20); Anmeldename GUICtrlSetTip(-1,"Anmeldename:"&@CRLF&"Geben Sie hier den Benutzernamen Ihres Email-Postfaches ein") $gui[8] = GUICtrlCreateInput("", 434, 84, 250, 20,0x0020); Passwort GUICtrlSetTip(-1,"Passwort:"&@CRLF&"Geben Sie hier das Passwort Ihres Email-Postfaches ein") GUIStartGroup() $gui[9] = GUICtrlCreateRadio("Niedrig", 83, 113, 59, 17); Wichtigkeit GUICtrlSetTip(-1,"Priorität:"&@CRLF&"hier stellen Sie die Priorität auf 'Niedrig'") $gui[10] = GUICtrlCreateRadio("Normal", 170, 113, 53, 17); Wichtigkeit GUICtrlSetTip(-1,"Priorität:"&@CRLF&"hier stellen Sie die Priorität auf 'Normal'") $gui[11] = GUICtrlCreateRadio("Hoch", 256, 113, 49, 17); Wichtigkeit GUICtrlSetTip(-1,"Priorität:"&@CRLF&"hier stellen Sie die Priorität auf 'Hoch'") GUIStartGroup() $gui[12] = GUICtrlCreateInput("25", 434, 112, 41, 20); IP-Port GUICtrlSetTip(-1,"Ip-Port:"&@CRLF&"hier können Sie einen Port zum Versenden der Email angeben"&@CRLF&"Für eine SSL-Verbindung müssen Sie möglicherweise einen anderen Port eintragen"&@CRLF&@CRLF&"Standard Ip-Port ist 25"&@CRLF&"Standard Ip-Port SSL ist 465") GUIStartGroup() $gui[13] = GUICtrlCreateRadio("aktiviert", 538, 113, 65, 17); SSL GUICtrlSetTip(-1,"SSL-Verschlüsselung:"&@CRLF&"hier aktivieren sie die SSL-Verschlüsselung"&@CRLF&"beachten Sie, dass nicht jeder Provider SSL-Verschlüsselung unterstützt."&@CRLF&@CRLF&"Standard Ip-Port ist 465.") $gui[14] = GUICtrlCreateRadio("deaktiviert", 613, 113, 73, 17); SSL GUIStartGroup() $gui[15] = GUICtrlCreateInput("", 66, 138, 617, 20); Betreff $gui[16] = GUICtrlCreateEdit("", 66, 178, 617, 270); Nachricht GUICtrlSetTip(-1,"Nachricht:"&@CRLF&"Sie können in dieses Feld auch den Pfad zu einer Datei eintragen,"&@CRLF&"dessen Inhalt als body erscheinen soll.") $gui[17] = GUICtrlCreateInput("", 66, 462, 467, 20); Dateianhang GUICtrlSetTip(-1,"Anhang auswählen:"&@CRLF&"hier können Sie eine oder mehrere Dateien auswählen, die als Anhang mit versendet werden"&@CRLF&"mit jeder erneuten Auswahl wird die vorherige gelöscht"&@CRLF&"es können mit Hilfe der 'Strg'- und 'Shift'-Taste mehrere Dateien ausgewählt werden" ) $gui[18] = GUICtrlCreateButton("Anhang auswählen ...",564,462,120,20) GUICtrlSetTip(-1,"Anhang auswählen:"&@CRLF&"hier können Sie eine oder mehrere Dateien auswählen, die als Anhang mit versendet werden"&@CRLF&"mit jeder erneuten Auswahl wird die vorherige gelöscht"&@CRLF&"es können mit Hilfe der 'Strg'- und 'Shift'-Taste mehrere Dateien ausgewählt werden" ) $gui[19] = GUICtrlCreateButton("Eingaben löschen",66,500,150,35) $gui[20] = GUICtrlCreateButton("Email abschicken",300,500,150,35) $gui[21] = GUICtrlCreateButton("Beenden",534,500,150,35) GUICtrlSetState($gui[10],$GUI_CHECKED) GUICtrlSetState($gui[14],$GUI_CHECKED) GUICtrlSetLimit($gui[9],5) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE, $gui[21] Exit Case $gui[18] GUICtrlSetData($gui[17],"") $anhang_new = "" $file = StringSplit(FileOpenDialog("", @MyDocumentsDir & "\", "alle Dateien (*.*)", 1+4), "|") If $file[0] = 1 Then $anhang_new &= StringReplace($file[1],'"',"")&";" ElseIf $file[0] > 1 Then For $i = 2 To UBound($file)-1 $anhang_new &= $file[1]&"\"&$file[$i]&";" Next EndIf GUICtrlSetData($gui[17],StringTrimRight($anhang_new,1)) Case $gui[19]; löschen GUICtrlSetData($gui[1],"") GUICtrlSetData($gui[2],"") GUICtrlSetData($gui[3],"") GUICtrlSetData($gui[4],"") GUICtrlSetData($gui[5],"") GUICtrlSetData($gui[6],"") GUICtrlSetData($gui[7],"") GUICtrlSetData($gui[8],"") GUICtrlSetState($gui[10],$GUI_CHECKED) GUICtrlSetData($gui[12],"25") GUICtrlSetState($gui[14],$GUI_CHECKED) GUICtrlSetData($gui[15],"") GUICtrlSetData($gui[16],"") GUICtrlSetData($gui[17],"") Case $gui[20]; abschicken Local $read[15] $read[1] = GUICtrlRead($gui[1]); Von $read[2] = GUICtrlRead($gui[2]); An $read[3] = GUICtrlRead($gui[3]); CC $read[4] = GUICtrlRead($gui[4]); BCC $read[5] = GUICtrlRead($gui[5]); Absendername $read[6] = GUICtrlRead($gui[6]); Smtp-Server $read[7] = GUICtrlRead($gui[7]); Anmeldename $read[8] = GUICtrlRead($gui[8]); Passwort $read[9] = $wichtig ; Wichtigkeit $read[10] = GUICtrlRead($gui[12]); port $read[11] = $ssl ; SSL $read[12] = GUICtrlRead($gui[15]); Betreff $read[13] = GUICtrlRead($gui[16]); Inhalt $read[14] = GUICtrlRead($gui[17]); Anhang If FileExists(_PathFull($read[13])) Then $read_txt = FileOpen($read[13],0) $read[13] = FileRead($read_txt) FileClose($read_txt) EndIf Switch "" Case $read[1], $read[2], $read[6], $read[12], $read[13] MsgBox(262160, 'sende Email', "Es müssen mindestens folgende Felder ausgefüllt sein:"&@CRLF&"Von, An, Smtp-Server, Betreff, Nachricht") Case Else GUICtrlSetData($gui[20],"Email wird versendet") GUICtrlSetData($gui[21],"bitte warten...") GUICtrlSetState($gui[19],$GUI_DISABLE) GUICtrlSetState($gui[20],$GUI_DISABLE) GUICtrlSetState($gui[21],$GUI_DISABLE) $rc = _INetSmtpMailCom($read[1],$read[2],$read[6],$read[12],$read[13],$read[5],$read[7],$read[8],$read[14],$read[3],$read[4],$read[9],$read[10],$read[11]) If @error Then MsgBox(262160,"sende Email","Fehler beim Versenden der Nachricht"&@CRLF&"Fehlercode: " & @error & " Beschreibung: " & $rc & @CRLF) SetError(1) Else MsgBox(262208,"sende Email","Die Nachricht wurde erfolgreich versendet.") SetError(0) ControlClick($gui[0],"",$gui[19]) EndIf GUICtrlSetData($gui[20],"Email abschicken") GUICtrlSetData($gui[21],"Beenden") GUICtrlSetState($gui[19],$GUI_ENABLE) GUICtrlSetState($gui[20],$GUI_ENABLE) GUICtrlSetState($gui[21],$GUI_ENABLE) EndSwitch Case $gui[9]; Variable Wichtigkeit niedrig festlegen $wichtig = "Low" Case $gui[10]; Variable Wichtigkeit normal festlegen $wichtig = "Normal" Case $gui[11]; Variable Wichtigkeit hoch festlegen $wichtig = "High" Case $gui[14] $ssl = "0" GUICtrlSetData($gui[12],"25") Case $gui[13] $ssl = "1" GUICtrlSetData($gui[12],"465") EndSwitch WEnd EndFunc ;==>gui ; Com Error Handler Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) $oMyRet[0] = $HexNumber $oMyRet[1] = StringStripWS($oMyError.description, 3) mbparam(2) ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF) SetError(1); something to check for when this function returns Return EndFunc ;==>MyErrFunc Func mbparam($flag = 0) Switch $flag Case 0 ConsoleWrite(@CRLF& _ "Folgende Parameter sind notwendig ([ ] = optional):"& @CRLF& _ @CRLF & _ "sende_email.exe 1 2 3 4 5 [6 7 8 9 10 11 12 13 14]"&@CRLF& _ StringFormat("%-23s %-25s","1 = Absender-Adresse","(Ihre Email-Adresse)")&@CRLF& _ StringFormat("%-23s %-25s","2 = Empfaenger-Adresse","(Die Empfaenger Email-Adresse)")&@CRLF& _ StringFormat("%-23s %-25s","3 = Smtp-Server","(Der SMTP-Server Ihres Email-Kontos)")&@CRLF& _ StringFormat("%-23s %-25s","4 = Betreff","(Der Betreff der Email)")&@CRLF& _ StringFormat("%-23s %-25s","5 = Nachricht","(HTML-Mail wenn '' vorhanden)") &@CRLF& _ StringFormat("%-23s %-22s","","(es kann auch der Pfad zu einer Datei angegeben werden.)")&@CRLF& _ "[optional]"&@CRLF& _ StringFormat("%-23s %-25s","6 = Absender-Name","(Angezeigter Name)")&@CRLF& _ StringFormat("%-23s %-25s","7 = Anmeldename","(Ihr Zugangsname i.d.R. Ihre Email-Adresse)")&@CRLF& _ StringFormat("%-23s %-25s","8 = Passwort","(Ihr Zugangspasswort zu Ihrem Email-Konto)")&@CRLF& _ StringFormat("%-23s %-25s","9 = Dateianhang","(Pfad zu/r Datei/n, die angehaengt werden soll/en)")&@CRLF& _ StringFormat("%-23s %-25s","10 = Cc-Adresse/n","(CC-Empfaenger dieser Email)")&@CRLF& _ StringFormat("%-23s %-25s","11 = Bcc-Adresse/n","(BCC-Empfaenger dieser Email)")&@CRLF& _ StringFormat("%-23s %-25s","12 = Wichtigkeit","(Standard = 'Normal', (Hoch, Niedrig))")&@CRLF& _ StringFormat("%-23s %-25s","13 = Port","(Standard = 25)")&@CRLF& _ StringFormat("%-23s %-25s","14 = SSL","(Standard = 0; aktiviert = 1)")&@CRLF& _ @CRLF& _ "Die Parameter muessen in der erwarteten Reihenfolge angegeben werden."&@CRLF& _ "Angaben mit Leerzeichen sind mit "&'" '&'"'&" einzuchliessen."&@CRLF& _ "mehrere Empfaenger/Dateien sind mit ';' zu trennen"&@CRLF& _ "eine grafische Oberflaeche zum Versenden Ihrer Email erhalten Sie mit '/gui'"&@CRLF) Case 1 ConsoleWrite(@CRLF&"!!! Bei der Angabe der Parameter ist ein Fehler aufgetreten !!!" &@CRLF& _ "Geben Sie nach dem Programmnamen den Parameter /? oder /help an, um eine"&@CRLF& _ "Uebersicht aller notwendigen/optionalen Parameter zu erhalten."&@CRLF) SetError(1) $flag = 0 Case 2 ConsoleWrite(@CRLF&"!!! Bei der Verarbeitung der Parameter ist ein Fehler aufgetreten !!!" &@CRLF& "Es wurden weniger als 14 Parameter uebergeben!!!"&@CRLF& _ "Geben Sie nach dem Programmnamen den Parameter /? oder /help an, um eine"&@CRLF& _ "Uebersicht aller notwendigen/optionalen Parameter zu erhalten."&@CRLF) SetError(1) $flag = 0 Case 3 ConsoleWrite(@CRLF&"!!! Bei der Verarbeitung der Parameter ist ein Fehler aufgetreten !!!" &@CRLF& "Es wurden mehr als 14 Parameter uebergeben!!!"&@CRLF& _ "Geben Sie nach dem Programmnamen den Parameter /? oder /help an, um eine"&@CRLF& _ "Uebersicht aller notwendigen/optionalen Parameter zu erhalten."&@CRLF) SetError(1) $flag = 0 EndSwitch EndFunc ;==>mbmparam Func _PathFull($sRelativePath, $sBasePath = @WorkingDir) If Not $sRelativePath Or $sRelativePath = "." Then Return $sBasePath Local $sFullPath = StringReplace($sRelativePath, "/", "\") ; Holds the full path (later, minus the root) Local Const $sFullPathConst = $sFullPath ; Holds a constant version of the full path. Local $sPath ; Holds the root drive/server Local $bRootOnly = StringLeft($sFullPath, 1) = "\" And StringMid($sFullPath, 2, 1) <> "\" For $i = 1 To 2 $sPath = StringLeft($sFullPath, 2) If $sPath = "\\" Then $sFullPath = StringTrimLeft($sFullPath, 2) $sPath &= StringLeft($sFullPath, StringInStr($sFullPath, "\") - 1) ExitLoop ElseIf StringRight($sPath, 1) = ":" Then $sFullPath = StringTrimLeft($sFullPath, 2) ExitLoop Else $sFullPath = $sBasePath & "\" & $sFullPath EndIf Next If $i = 3 Then Return "" Local $aTemp = StringSplit($sFullPath, "\") Local $aPathParts[$aTemp[0]], $j = 0 For $i = 2 To $aTemp[0] If $aTemp[$i] = ".." Then If $j Then $j -= 1 ElseIf Not ($aTemp[$i] = "" And $i <> $aTemp[0]) And $aTemp[$i] <> "." Then $aPathParts[$j] = $aTemp[$i] $j += 1 EndIf Next $sFullPath = $sPath If Not $bRootOnly Then For $i = 0 To $j - 1 $sFullPath &= "\" & $aPathParts[$i] Next Else $sFullPath &= $sFullPathConst If StringInStr($sFullPath, "..") Then $sFullPath = _PathFull($sFullPath) EndIf While StringInStr($sFullPath, ".\") $sFullPath = StringReplace($sFullPath, ".\", "\") WEnd Return $sFullPath EndFunc ;==>_PathFull