mattsk42 Posted August 2, 2018 Share Posted August 2, 2018 I have a script that pops up a window, lets you type things in, and then emails our helpdesk. It works. What I want to do is add 3 more buttons that allow you to attach 3 photos (or less) from your computer. Something simple as "Add attachment" and then you can browse for it. I don't even know where to begin with programming that button. If anyone could post an example, that would be great. Here's the current script (changed to pet.com because I like dogs): expandcollapse popup;expand popup ;#include <File.au3> ; =============================================================================================================================== ; Variables for the _INetSmtpMailCom ; =============================================================================================================================== Global Enum _ $g__INetSmtpMailCom_ERROR_FileNotFound = 1, _ $g__INetSmtpMailCom_ERROR_Send, _ $g__INetSmtpMailCom_ERROR_ObjectCreation, _ $g__INetSmtpMailCom_ERROR_COUNTER Global Const $g__cdoSendUsingPickup = 1 ; Send message using the local SMTP service pickup directory. Global Const $g__cdoSendUsingPort = 2 ; Send the message using the network (SMTP over the network). Must use this to use Delivery Notification Global Const $g__cdoAnonymous = 0 ; Do not authenticate Global Const $g__cdoBasic = 1 ; basic (clear-text) authentication Global Const $g__cdoNTLM = 2 ; NTLM Global $gs_thoussep = "." Global $gs_decsep = "," Global $sFileOpenDialog = "" ; Delivery Status Notifications Global Const $g__cdoDSNDefault = 0 ; None Global Const $g__cdoDSNNever = 1 ; None Global Const $g__cdoDSNFailure = 2 ; Failure Global Const $g__cdoDSNSuccess = 4 ; Success Global Const $g__cdoDSNDelay = 8 ; Delay #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> ; This is to get the local username Local $myVar = "USERNAME" Local $myValue = EnvGet($myVar) ; This is the GUI #Region ### START Koda GUI section ### Form=f:\scripts\autoit\name-issue.kxf $Form1 = GUICreate("Submit a Helpdesk Ticket", 371, 260, 214, 199) ;~ $Pet = GUICtrlCreateLabel("Pet username:", 8, 8, 79, 17) $Label2 = GUICtrlCreateLabel("Issue with as much detail as possible:", 8, 7, 180, 17) ;~ $Name = GUICtrlCreateInput("", 88, 5, 105, 21) $Issue = GUICtrlCreateEdit("", 8, 25, 353, 200) $Submit = GUICtrlCreateButton("Submit", 8, 230, 75, 25) $Cancel = GUICtrlCreateButton("Cancel", 92, 230, 75, 25) ;~ $Label1 = GUICtrlCreateLabel("(example: jconnor)", 92, 26, 98, 17) ;~ $Label3 = GUICtrlCreateLabel("@pet.com", 195, 8, 60, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### ; These are for future use ;~ $ClientName = "ClientName##" ;~ $AtPet = "@pet.com##" While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $Submit ; Execute code when user presses the button Local $sSmtpServer = "smtp.gmail.com" ; address for the smtp-server to use - REQUIRED Local $sFromName = "" ; name from who the email was sent Local $sFromAddress = "user@pet.com"; address from where the mail should come Local $sToAddress = "helpdesk@pet.com" ; destination address of the email - REQUIRED Local $sSubject = StringUpper ($myValue); subject from the email - can be anything you want it to be Local $sBody = GUICtrlRead($Issue); the messagebody from the mail - can be left blank but then you get a blank mail Local $sAttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed Local $sCcAddress = "" ; address for cc - leave blank if not needed Local $sBccAddress = "" ; address for bcc - leave blank if not needed Local $sImportance = "Normal" ; Send message priority: "High", "Normal", "Low" Local $sUsername = "jconnor@pet.com" ; username for the account used from where the mail gets sent - REQUIRED Local $sPassword = "ajlkdjfawyfbna" ; password for the account used from where the mail gets sent - REQUIRED Local $iIPPort = 465 ; GMAIL port used for sending the mail Local $bSSL = True ; GMAIL enables/disables secure socket layer sending - set to True if using httpS Local $bIsHTMLBody = False Local $iDSNOptions = $g__cdoDSNDefault Local $rc = _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sBody, $sAttachFiles, $sCcAddress, $sBccAddress, $sImportance, $sUsername, $sPassword, $iIPPort, $bSSL, $bIsHTMLBody, $iDSNOptions) If @error Then MsgBox(0, "_INetSmtpMailCom(): Error sending message", _ "Error code: " & @error & @CRLF & @CRLF & _ "Error Hex Number: " & _INetSmtpMailCom_ErrHexNumber() & @CRLF & @CRLF & _ "Description: " & _INetSmtpMailCom_ErrDescription() & @CRLF & @CRLF & _ "Description (rc): " & $rc & @CRLF & @CRLF & _ "ScriptLine: " & _INetSmtpMailCom_ErrScriptLine() _ ) ConsoleWrite("### COM Error ! Number: " & _INetSmtpMailCom_ErrHexNumber() & " ScriptLine: " & _INetSmtpMailCom_ErrScriptLine() & " Description:" & _INetSmtpMailCom_ErrDescription() & @LF) Else Func _Sendmail() Dim $iMsgBoxAnswer $iMsgBoxAnswer = MsgBox(262208, "Success!", "Thank you.", 5) EndIf EndFunc ;==>_Enviarmail #Region UDF Functions ; The UDF ; #FUNCTION# ==================================================================================================================== ; Name ..........: _INetSmtpMailCom ; Description ...: ; Syntax ........: _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress[, $s_Subject = ""[, $as_Body = ""[, ; $s_AttachFiles = ""[, $s_CcAddress = ""[, $s_BccAddress = ""[, $s_Importance = "Normal"[, $s_Username = ""[, ; $s_Password = ""[, $IPPort = 25[, $bSSL = False[, $bIsHTMLBody = False[, $iDSNOptions = $g__cdoDSNDefault]]]]]]]]]]]]) ; Parameters ....: $s_SmtpServer - A string value. ; $s_FromName - A string value. ; $s_FromAddress - A string value. ; $s_ToAddress - A string value. ; $s_Subject - [optional] A string value. Default is "". ; $s_Body - [optional] A string value. Default is "". ; $s_AttachFiles - [optional] A string value. Default is "". ; $s_CcAddress - [optional] A string value. Default is "". ; $s_BccAddress - [optional] A string value. Default is "". ; $s_Importance - [optional] A string value. Default is "Normal". ; $s_Username - [optional] A string value. Default is "". ; $s_Password - [optional] A string value. Default is "". ; $IPPort - [optional] An integer value. Default is 25. ; $bSSL - [optional] A binary value. Default is False. ; $bIsHTMLBody - [optional] A binary value. Default is False. ; $iDSNOptions - [optional] An integer value. Default is $g__cdoDSNDefault. ; Return values .: None ; Author ........: Jos ; Modified ......: mLipok ; Remarks .......: ; Related .......: http://www.autoitscript.com/forum/topic/23860-smtp-mailer-that-supports-html-and-attachments/ ; Link ..........: http://www.autoitscript.com/forum/topic/167292-smtp-mailer-udf/ ; Example .......: Yes ; =============================================================================================================================== Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $bSSL = False, $bIsHTMLBody = False, $iDSNOptions = $g__cdoDSNDefault) ; init Error Handler _INetSmtpMailCom_ErrObjInit() Local $objEmail = ObjCreate("CDO.Message") If Not IsObj($objEmail) Then Return SetError($g__INetSmtpMailCom_ERROR_ObjectCreation, Dec(_INetSmtpMailCom_ErrHexNumber()), _INetSmtpMailCom_ErrDescription()) ; Clear previous Err information _INetSmtpMailCom_ErrHexNumber(0) _INetSmtpMailCom_ErrDescription('') _INetSmtpMailCom_ErrScriptLine('') $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject ; Select whether or not the content is sent as plain text or HTM If $bIsHTMLBody Then $objEmail.Textbody = $s_Body & @CRLF Else $objEmail.HTMLBody = $s_Body EndIf ; Add Attachments 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 ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF) $objEmail.AddAttachment($S_Files2Attach[$x]) Else ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) Return SetError($g__INetSmtpMailCom_ERROR_FileNotFound, 0, 0) EndIf Next EndIf ; Set Email Configuration $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = $g__cdoSendUsingPort $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") = $g__cdoBasic $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 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = $bSSL ;Update Configuration Settings $objEmail.Configuration.Fields.Update ; Set Email Importance Switch $s_Importance Case "High" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High" Case "Normal" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal" Case "Low" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low" EndSwitch ; Set DSN options If $iDSNOptions <> $g__cdoDSNDefault And $iDSNOptions <> $g__cdoDSNNever Then $objEmail.DSNOptions = $iDSNOptions $objEmail.Fields.Item("urn:schemas:mailheader:disposition-notification-to") = $s_FromAddress ;~ $objEmail.Fields.Item("urn:schemas:mailheader:return-receipt-to") = $s_FromAddress EndIf ; Update Importance and Options fields $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then _INetSmtpMailCom_ErrObjCleanUp() Return SetError($g__INetSmtpMailCom_ERROR_Send, Dec(_INetSmtpMailCom_ErrHexNumber()), _INetSmtpMailCom_ErrDescription()) EndIf ; CleanUp $objEmail = "" _INetSmtpMailCom_ErrObjCleanUp() EndFunc ;==>_INetSmtpMailCom ; ; Com Error Handler Func _INetSmtpMailCom_ErrObjInit($bParam = Default) Local Static $oINetSmtpMailCom_Error = Default If $bParam == 'CleanUp' And $oINetSmtpMailCom_Error <> Default Then $oINetSmtpMailCom_Error = '' Return $oINetSmtpMailCom_Error EndIf If $oINetSmtpMailCom_Error = Default Then $oINetSmtpMailCom_Error = ObjEvent("AutoIt.Error", "_INetSmtpMailCom_ErrFunc") EndIf Return $oINetSmtpMailCom_Error EndFunc ;==>_INetSmtpMailCom_ErrObjInit Func _INetSmtpMailCom_ErrObjCleanUp() _INetSmtpMailCom_ErrObjInit('CleanUp') EndFunc ;==>_INetSmtpMailCom_ErrObjCleanUp Func _INetSmtpMailCom_ErrHexNumber($vData = Default) Local Static $vReturn = 0 If $vData <> Default Then $vReturn = $vData Return $vReturn EndFunc ;==>_INetSmtpMailCom_ErrHexNumber Func _INetSmtpMailCom_ErrDescription($sData = Default) Local Static $sReturn = '' If $sData <> Default Then $sReturn = $sData Return $sReturn EndFunc ;==>_INetSmtpMailCom_ErrDescription Func _INetSmtpMailCom_ErrScriptLine($iData = Default) Local Static $iReturn = '' If $iData <> Default Then $iReturn = $iData Return $iReturn EndFunc ;==>_INetSmtpMailCom_ErrScriptLine Func _INetSmtpMailCom_ErrFunc() _INetSmtpMailCom_ErrObjInit() _INetSmtpMailCom_ErrHexNumber(Hex(_INetSmtpMailCom_ErrObjInit().number, 8)) _INetSmtpMailCom_ErrDescription(StringStripWS(_INetSmtpMailCom_ErrObjInit().description, 3)) _INetSmtpMailCom_ErrScriptLine(_INetSmtpMailCom_ErrObjInit().ScriptLine) SetError(1) ; something to check for when this function returns Return EndFunc ;==>_INetSmtpMailCom_ErrFunc #EndRegion UDF Functions _Sendmail() Exit Case $Cancel Exit EndSwitch WEnd Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted August 3, 2018 Share Posted August 3, 2018 @mattsk42 There are a lot of ways to do what you're trying to do. The first one, is select file per file with a FileOpenDialog(), and select the file(s) you want to attach to your email. Just dispose a button in your GUI, and everytime the user presses the button and select a file, add the path of the file to an array, which you have to attach here: Local $sAttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed Hope that helps Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mattsk42 Posted August 3, 2018 Author Share Posted August 3, 2018 I can create a thing that pops up a dialog to select a file with this (yes I know it's spelled wrong): Func atach() ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Select a single file of any type." ; Display an open dialog to select a file. Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "All (*.*)", $FD_FILEMUSTEXIST) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file was selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) ; Replace instances of "|" with @CRLF in the string returned by FileOpenDialog. $sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF) EndIf EndFunc ;==>atach And then I have this new button: $Attachments = GUICtrlCreateButton("Attachments", 170, 230, 75, 25) 1. How do I make that button open the file open dialog? 2. How do I combine the two so that it fills in what I attached INTO the line: Local $sAttachFiles = _______ Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted August 4, 2018 Share Posted August 4, 2018 @mattsk42 As I have said, there are several ways to do it Here it is a little hint for you: expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form= Global $frmSelectFiles = GUICreate("frmSelectFiles", 384, 249, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, "ExitApplication") Global $btnAddFile = GUICtrlCreateButton("Add", 10, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "AddFile") $btnRemoveFile = GUICtrlCreateButton("Remove", 89, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "RemoveFile") $btnDisplayFiles = GUICtrlCreateButton("Display", 169, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "DisplayFiles") Global $lbFiles = GUICtrlCreateList("", 10, 48, 369, 188) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 Sleep(100) WEnd Func ExitApplication() Exit EndFunc Func AddFile() Local $strFilePath = FileOpenDialog("Select file:", @ScriptDir, "All files (*.*)") If @error = 1 Then ConsoleWrite("No file(s) selected." & @CRLF) ElseIf @error > 1 Then ConsoleWrite("Error while displaying the FileOpenDialog box. Error: " & @error & @CRLF) Else _GUICtrlListBox_AddString($lbFiles, $strFilePath) If @error Then ConsoleWrite("Error while adding the file '" & $strFilePath & "'. Error: " & @error & @CRLF) Else ConsoleWrite("File '" & $strFilePath & "' added correctly." & @CRLF) EndIf EndIf EndFunc Func RemoveFile() Local $intItemIndex = _GUICtrlListBox_GetCurSel($lbFiles) If @error Then ConsoleWrite("Error while getting the current selected Item index in the ListBox. Error: " & @error & @CRLF) Else _GUICtrlListBox_DeleteString($lbFiles, $intItemIndex) If @error Then ConsoleWrite("Error while deleting the Item at the index " & $intItemIndex & " in the ListBox. Error: " & @error & @CRLF) Else ConsoleWrite("Item with index " & $intItemIndex & " deleted correctly from the ListBox." & @CRLF) EndIf EndIf EndFunc Func DisplayFiles() Local $intItemCount, _ $arrFiles[1], _ $strFiles = "" $intItemCount = _GUICtrlListBox_GetCount($lbFiles) If @error Then ConsoleWrite("Error while getting the count of the Items in the ListBox. Error: " & @error & @CRLF) Else For $i = 0 To $intItemCount - 1 $arrFiles[$i] = _GUICtrlListBox_GetText($lbFiles, $i) If @error Then ConsoleWrite("Error while getting the text of the Item with index " & $i & ". Error: " & @error & @CRLF) Else ReDim $arrFiles[UBound($arrFiles) + 1] EndIf Next ReDim $arrFiles[UBound($arrFiles) - 1] EndIf _ArrayDisplay($arrFiles, "From the ListBox:") $strFiles = _ArrayToString($arrFiles, ";") If @error Then ConsoleWrite("Error while converting the array to string. Error: " & @error & @CRLF) Else ConsoleWrite("Here it is the string containing all the files you want to attach: " & @CRLF & _ $strFiles & @CRLF) EndIf EndFunc Just study it and have fun Best Regards. Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mattsk42 Posted August 6, 2018 Author Share Posted August 6, 2018 I think....I got this close. I can pull up my script, click attach and it pops up the screen, attach the file, but then when I click Submit, I get this error: $SFiles2Attach[$x]=_PathFull($S_Files2Attach[$x]_PathFull Error Unknown function name. (_PathFull) Here's what I have added: Global $frmSelectFiles = GUICreate("frmSelectFiles", 384, 249, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, "ExitApplication") Global $btnAddFile = GUICtrlCreateButton("Add", 10, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "AddFile") $btnRemoveFile = GUICtrlCreateButton("Remove", 89, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "RemoveFile") $btnDisplayFiles = GUICtrlCreateButton("Display", 169, 16, 75, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetOnEvent(-1, "DisplayFiles") Global $lbFiles = GUICtrlCreateList("", 10, 48, 369, 188) GUISetState(@SW_SHOW) <code> Case $Attachments Local $strFilePath = FileOpenDialog("Select file:", @ScriptDir, "All files (*.*)") If @error = 1 Then ConsoleWrite("No file(s) selected." & @CRLF) ElseIf @error > 1 Then ConsoleWrite("Error while displaying the FileOpenDialog box. Error: " & @error & @CRLF) Else _GUICtrlListBox_AddString($lbFiles, $strFilePath) If @error Then ConsoleWrite("Error while adding the file '" & $strFilePath & "'. Error: " & @error & @CRLF) Else ConsoleWrite("File '" & $strFilePath & "' added correctly." & @CRLF) EndIf Error is somewhere in the original script here: ; Add Attachments 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 ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF) $objEmail.AddAttachment($S_Files2Attach[$x]) Else ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) Return SetError($g__INetSmtpMailCom_ERROR_FileNotFound, 0, 0) EndIf Next EndIf Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted August 6, 2018 Share Posted August 6, 2018 @milkmoron Did you add the "File.au3" library? This one: #include <File.au3> mattsk42 1 Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mattsk42 Posted August 6, 2018 Author Share Posted August 6, 2018 Wow that's it! Thank you. FrancescoDiMuro 1 Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted August 7, 2018 Share Posted August 7, 2018 Happy to have helped mattsk42 1 Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now