#include <File.au3>
#include <ScreenCapture.au3>
#include <GUIConstants.au3>
#Include <Array.au3>
#include <adfunctions.au3>

#Region ### START Koda GUI section ### Form=g:\programme_tools\koda_2007.06.09\forms\mailer.kxf
$Form1 = GUICreate("Backoffice Tool 1.0 ", 446, 526, 347, 129)
$Label1 = GUICtrlCreateLabel("STRG + F4 drücken, um Screenshot zu erzeugen!", 24, 464, 238, 17)
$Button1 = GUICtrlCreateButton("Mail senden", 288, 472, 137, 33, 0)
$Label2 = GUICtrlCreateLabel("Button drücken um Mail zu versenden!", 56, 488, 186, 17)
$Input2 = GUICtrlCreateInput(@username, 136, 88, 289, 21)
$Combo3 = GUICtrlCreateCombo("", 136, 120, 289, 21)
GUICtrlSetData(-1, " |IT|Telefonbuchung")
$Input4 = GUICtrlCreateInput("", 136, 152, 289, 21)
$Label3 = GUICtrlCreateLabel("Bitte alle Felder ausfüllen!", 24, 16, 160, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("Portal:", 24, 64, 34, 17)
$Label5 = GUICtrlCreateLabel("Expedient:", 24, 96, 54, 17)
$Label6 = GUICtrlCreateLabel("Buchungsquelle:", 24, 128, 83, 17)
$Label7 = GUICtrlCreateLabel("E-Mailadresse des KD:", 24, 160, 111, 17)
$Label8 = GUICtrlCreateLabel("Zus. Fax | Tel. des KD:", 24, 192, 112, 17)
$Input5 = GUICtrlCreateInput("", 136, 184, 289, 21)
$Label9 = GUICtrlCreateLabel("Zahlungsart:", 24, 224, 63, 17)
$Combo1 = GUICtrlCreateCombo("", 136, 56, 289, 25)
GUICtrlSetData(-1, " |5vorflug.com|5vorflug.de|abocard|bayerntourismus|bcviva|bigxtra|bigxtra.at|bkk|bonprix|bonusferien|budni|dgb|drivefti|flcounter|flieg-ab-basel|fliegen.com|flugbazar|flugbörse|flugbörse rb|fly.de|fly.de gt|fly.de ifa|fly.de sk|fly.de modular sk|fly.de modular big|fly.de zo|flycalabria|fti|fti.at|fti-ferienwelt|gardenresort|gloeckle|hamburgtravel|happydays|kloppenburg|lal|lidlreisen|maxxtravel|mcflight|monorama|myselect|nexgentravel|o2|OT-ERFstadt|rabattferien|rot-weiss-urlaub|schwinges|s-erlebniswelten|skTV-FremdCC|skTV-Rb7723|skTV-Rb7783|skTV-Rb7816|skTV-Rb7838|skTV-Rb7845|skTV-Rb7856|skTV-Rb7916|skTV-Rb7931|skTV-Rb7989|skTV-Rb7991|skTV-Rb8078|skTV-Rb8093|SkTV-Rb8107|skTV-Rb8204|skTV-Rb8232|skTV-Rb8240|skTV-Rb8241|skTV-Rb8281|skTV-Rb8280|skTV-Rb8272|skTV-Rb8295|skTV-Rb8310|skTV-Rb8339|skTV-Rb8357|skTV-Rb8410|skTV-Rb8432|skTV-Rb8508|skTV-Rb8554|skTV-Rb8556|sonnenklarTV|sonnenklarTV web|Sonstiges|tv14|tvmovie|weltbild.at|weltbild.de")
$Combo2 = GUICtrlCreateCombo("", 136, 216, 289, 25)
GUICtrlSetData(-1, " |Veranstalterinkasso|Veranstalterinkasso - Kreditkarte|Agenturinkasso - Überweisung|Agenturinkasso - Laschrift")
$Label10 = GUICtrlCreateLabel("Sonstige Notizen:", 24, 288, 87, 17)
$Edit1 = GUICtrlCreateEdit("", 24, 312, 401, 137)
GUICtrlSetData(-1, "")
$Label11 = GUICtrlCreateLabel("Status der Buchung:", 24, 256, 101, 17)
$Combo4 = GUICtrlCreateCombo("", 136, 248, 289, 25)
GUICtrlSetData(-1, " |Buchung|Option|Anfrage")
$Checkbox1 = GUICtrlCreateCheckbox("Dringend", 136, 288, 193, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;-------begin username auflösen----
$user = _ADSamAccountNameToFQDN(@UserName)

$user_split = StringSplit($user, ",")
$user_split1 = StringSplit($user_split[1], "=")

$username = $user_split1[2]

;~ ;MsgBox(0,"","Hallo " & $username & "," &@CRLF & "das Tool wird gestartet!" ,3)
;-------ende username auflösen----


;-------------------------------------
;HotKeySet("^{F4}", "Capture_start")    ;Strg-F4
;HotKeySet("^{F9}")    ;Strg-F9

;HotKeySet("{PRINTSCREEN}", "Capture_start")
;HotKeySet("+!d", "Capture_start")    ;Shift-Alt-d
;--------------------------------------


Global $s_AttachFiles
;--function dateien in array lesen--

Func _getFilePathes($sPath, $sFilter = '(*.*)', $iFlag = 0)
    Local $FileList = _FileListToArray($sPath, $sFilter, $iFlag)
    If @error Then Return (@error * (-1))
    Local $re_A = ''
    For $i = 1 To UBound($FileList) - 1
        $re_A &= $sPath & '\' & $FileList[$i] & ';'
    Next
    Return $re_A
EndFunc   ;==>_getFilePathes

$s_AttachFiles =  $re_A

;-----------------------------------
; meine version mal auskommentiert
;-----------------------------------

;~ Func _getFilePathes($sPath, $sFilter = '(*.*)', $iFlag = 0)
;~     Local $FileList = _FileListToArray($sPath, $sFilter, $iFlag)
;~     If @error Then Return (@error * (-1))
;~     Local $re_A[UBound($FileList)]
;~     For $i=1 TO UBound($FileList) -1
;~         $re_A[$i] = $sPath & '\' & $FileList[$i]
;~     Next
;~     $re_A[0] = $FileList[0]
;~ 	;MsgBox(0,"",$re_A[0])   ; anzahl der Inhalte im array
;~ 	
;~ 	If $re_A[0] = 1 Then 
;~ 		;MsgBox(0,"","1 file")
;~ 		$s_AttachFiles =  $re_A[1]
;~ 		;MsgBox(0,"",$s_AttachFiles)
;~ 	EndIf
;~ 	If $re_A[0] = 2 Then 
;~ 		;MsgBox(0,"","2 files")
;~ 		$s_AttachFiles =  $re_A[2] &";"& $re_A[1]
;~ 		;MsgBox(0,"",$s_AttachFiles)
;~ 	EndIf
;~ 	If $re_A[0] = 3 Then 
;~ 		;MsgBox(0,"","3 files")
;~ 		$s_AttachFiles =  $re_A[3] &";"& $re_A[2] &";"& $re_A[1]
;~ 		;MsgBox(0,"",$s_AttachFiles)
;~ 	EndIf
;~ 	If $re_A[0] = 4 Then 
;~ 		;MsgBox(0,"","4 files")
;~ 		$s_AttachFiles =  $re_A[4] &";"& $re_A[3] &";"& $re_A[2] &";"& $re_A[1]
;~ 		;MsgBox(0,"",$s_AttachFiles)
;~ 	EndIf
;~ 	If $re_A[0] = 5 Then 
;~ 		;MsgBox(0,"","5 files")
;~ 		$s_AttachFiles =  $re_A[5] &";"& $re_A[4] &";"& $re_A[3] &";"& $re_A[2] &";"& $re_A[1]
;~ 		;MsgBox(0,"",$s_AttachFiles)
;~ 	EndIf
;~ 	
;~ 	Return $re_A
;~ EndFunc   ;==>_getFilePathes

; --> ende function


$t1 = "----------------------------------------------" & @CRLF

While 1
    ;Sleep(100)
    HotKeySet("^{F4}", "Capture_start")    ;Strg-F4
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		
		Case $Button1
					
					;--dateien in array lesen
					$re = _getFilePathes(@MyDocumentsDir & "\mail_screenshot", '*.jpg')
					;_ArrayDisplay($re)
					
			 ;######################################
			 ; checkbox1 auf wert prüfen
			 ;######################################
			 If GUICtrlRead($Checkbox1, $GUI_CHECKED)= $GUI_CHECKED Then 
				 $cb1 = GUICtrlRead($Checkbox1, $GUI_CHECKED)
			 Else
				 $cb1 = GUICtrlRead($Checkbox1, $GUI_UNCHECKED)= $GUI_UNCHECKED 
			 EndIf
			 
			 IF $cb1 = False Then 
				$cba1 = GUICtrlRead($Checkbox1, $GUI_CHECKED)
			 Else
			    $cba1 = " "
			 EndIf
					
					;-------------------------------
					;inhalt prüfen
					;-------------------------------
					
 					$i2 = GUICtrlRead($Input2)
					$i4 = GUICtrlRead($Input4)
					$i5 = GUICtrlRead($Input5)
					$cbo1 = GUICtrlRead($Combo1)
					$cbo2 = GUICtrlRead($Combo2)
					$cbo3 = GUICtrlRead($Combo3)
					$cbo4 = GUICtrlRead($Combo4)
					$edit = GUICtrlRead($Edit1)
					
					;-------------------------------
					;inhalt prüfen ende
					;-------------------------------

					;---------------------------------------
					; mailbody
					;---------------------------------------
					$mbody = ($t1 & "Portal: " & @CRLF & $cbo1 & @CRLF & $t1 & "Expedient: " & @CRLF & $i2 & @CRLF & $t1 & "Buchungsquelle: " & @CRLF & $cbo3 & @CRLF & $t1 & "E-Mailadresse des KD: " & @CRLF & $i4 & @CRLF & $t1 & "Zus. Fax | Tel. des KD: " & @CRLF & $i5 & @CRLF & $t1 & "Zahlungsart: " & @CRLF & $cbo2 & @CRLF & $t1 & "Status der Buchung: " & @CRLF & $cbo4 & @CRLF & $t1 & "Sonstige Notizen: " & @CRLF & $edit & @CRLF & $t1 )
					

					Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
					;##################################
					; Include
					;##################################
					;#Include<file.au3>
					;##################################
					; Variables
					;##################################
					$s_SmtpServer = "10.82.0.30"              					; address for the smtp-server to use - REQUIRED
					$s_FromName = @UserName ;@UserName 			       ; name from who the email was sent
					$s_FromAddress = @UserName & "@****.de" ;  address from where the mail should come
					$s_ToAddress = "****@****.de"   ; destination address of the email - REQUIRED
					$s_Subject = "xxxxxx " & $cba1 ; subject from the email - can be anything you want it to be$s_CcAddress = "steuerung@ostteam.de"
					$as_Body = $mbody & @CRLF & @CRLF & "MfG" & @CRLF & $username; the messagebody from the mail - can be left blank but then you get a blank mail
					;$s_AttachFiles = "C:\Dokumente und Einstellungen\marcel.graf.OSTTEAM\Eigene Dateien\screenshot\screenshot_1.jpg;C:\Dokumente und Einstellungen\marcel.graf.OSTTEAM\Eigene Dateien\screenshot\screenshot_2.jpg"   ; the file you want to attach- leave blank if not needed
					;$s_AttachFiles = $a1&";"&$a2   ; the file you want to attach- leave blank if not needed
					$s_CcAddress = ""  ; address for cc - leave blank if not needed
					$s_BccAddress = " " 
					$s_Username = "******"                    ; username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
					$s_Password = "********"                  ; password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
					$IPPort = 25                              ; port used for sending the mail
					$ssl = 0                                  ; enables/disables secure socket layer sending - put to 1 if using httpS
					;~ $IPPort=465                            ; GMAIL port used for sending the mail
					;~ $ssl=1                                 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

					;##################################
					; Script
					;##################################
					
					Global $oMyRet[2]
					Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
					$rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
					If @error Then
						MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
					EndIf
					;

					Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_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.Bcc = $s_BccAddress
						$objEmail.Subject = $s_Subject
						If StringInStr($as_Body,"<") and StringInStr($as_Body,">") 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] = _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
					;
					;
					; Com Error Handler
					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); something to check for when this function returns
						Return
					EndFunc ;==>MyErrFunc 
					
					;screenshot files löschen

					FileDelete(@MyDocumentsDir & "\mail_screenshot\*.*")
					
					;GUICtrlSetData($Input2, "")
					;GUICtrlSetData($Combo1, "")
					;GUICtrlSetData($Combo2, " |Veranstalterinkasso|Veranstalterinkasso - Kreditkarte|Agenturinkasso - Überweisung|Agenturinkasso - Laschrift")
					;GUICtrlSetData($Combo4, "")
					GUICtrlSetData($Input4, "")
					GUICtrlSetData($Input5, "")
					GUICtrlSetData($Edit1, "")
					ControlCommand("","Dringend",$Checkbox1, "UnCheck", "")
					$s_AttachFiles = ""
								
		EndSwitch
WEnd



; function capture screenshot

Func Capture_start()

	; Capture full screen
	If FileExists(@MyDocumentsDir & "\mail_screenshot") Then
    ;MsgBox(4096, "C:\autoexec.bat File", "Exists")
	Else
    ;MsgBox(4096,"C:\autoexec.bat File", "Does NOT exists")
	DirCreate(@MyDocumentsDir & "\mail_screenshot")
	EndIf
	;FileDelete(@MyDocumentsDir & "\Printscreen*.*"
	_ScreenCapture_Capture(@MyDocumentsDir & "\mail_screenshot\screenshot_"& @HOUR & @MIN & @SEC & ".jpg")
				
	MsgBox(0,"","Screenshot erstellt!",1)
	
EndFunc

Func IsMemberOf($group, $user)
	If StringLeft($group, 3) <> "CN=" Then
		$group = "CN=" & $group
	EndIf
	Dim $usergroups[1], $i = 1

	Dim $objConnection, $oUsr
	
	
	$objConnection = ObjCreate("ADODB.Connection")  ; Create COM object to AD
	$objConnection.Provider = "ADsDSOObject"
	$objConnection.Open ("Active Directory Provider")  ; Open connection to AD
	
	$objRootDSE = ObjGet("LDAP://RootDSE")
	Global $strDNSDomain = $objRootDSE.Get ("defaultNamingContext")  ; Retrieve the current AD domain name

	$strQuery = "<LDAP://" & $strDNSDomain & ">;(sAMAccountName=" & $user & ");ADsPath;subtree"
	$objRecordSet = $objConnection.Execute ($strQuery)  ; Retrieve the FQDN for the logged on user
	$ldap_entry = $objRecordSet.fields (0).value
	$oUsr = ObjGet($ldap_entry)  ; Retrieve the COM Object for the logged on user
	$groups = $oUsr.groups  ; Get the list of group objects from the user
	
	For $groupname In $groups
		If $groupname.name = $group Then Return 1
		
	Next
	Return 0
	
EndFunc   ;==>IsMemberOf


					
