pdvos Posted March 6, 2020 Share Posted March 6, 2020 Hello, I use some autoit tools to pull backups from many workstations and when the tools are done they send an email reporting issues. Recently the tool stopped sending email on some Windows 10 clients .. and after debugging I managed to get an error out of my programs. Error code:2 Description:The requested body part was not found in this message. The workaround: It seems that the Windows Input Language default must be "English (United States)" or if you play with the short date format, I set it to dd-MM-yy It starts working again. I hope this helps some of you if you run into the same problems. (not really sure where to put this message .. sorry) Link to comment Share on other sites More sharing options...
Developers Jos Posted March 6, 2020 Developers Share Posted March 6, 2020 Moved to the appropriate forum. Moderation Team SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Developers Jos Posted March 6, 2020 Developers Share Posted March 6, 2020 I assume this is an AutoIt script you are talking about? Any source you can share to play with? Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
pdvos Posted March 6, 2020 Author Share Posted March 6, 2020 expandcollapse popup; ;################################## ; Include ;################################## #Include<file.au3> ;################################## ; Variables ;################################## $SmtpServer = "smtp-mail.outlook.com" ; address for the smtp-server to use - REQUIRED $FromName = "Andy" ; name from who the email was sent $FromAddress = "*******@outlook.com" ; address from where the mail should come $ToAddress = "*******@outlook.com" ; destination address of the email - REQUIRED $Subject = "Testmail" ; subject from the email - can be anything you want it to be $Body = "Testmail" ; the messagebody from the mail - can be left blank but then you get a blank mail $AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed $CcAddress = "" ; address for cc - leave blank if not needed $BccAddress = "" ; address for bcc - leave blank if not needed $Importance = "Normal" ; Send message priority: "High", "Normal", "Low" $Username = "*******@outlook.com" ; username for the account used from where the mail gets sent - REQUIRED $Password = "*******" ; password for the account used from where the mail gets sent - REQUIRED $IPPort = 25 ; port used for sending the mail $ssl = 1 ; 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($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl) If @error Then MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc) EndIf ; ; The UDF Func _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, $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 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]) ;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console 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) 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 "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 $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf $objEmail="" 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 This is what I used to get the error message … script is based on someone else here on the forum. After setting the regional settings to the workaround settings the mail got delivered. ty- for moving Link to comment Share on other sites More sharing options...
Developers Jos Posted March 6, 2020 Developers Share Posted March 6, 2020 (edited) What happens when you change this section: If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf in: $objEmail.HTMLBody = $as_Body This should auto-generate the text variant for the message as well. Jos Edited March 6, 2020 by Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
pdvos Posted March 6, 2020 Author Share Posted March 6, 2020 The Change didn't work didn't work. Narrowed if further down Control Panel\Clock and Region => Region Format: English(United States) and English(United Kingdom) - works Format: English(Netherlands) - doesn't work Link to comment Share on other sites More sharing options...
Developers Jos Posted March 6, 2020 Developers Share Posted March 6, 2020 I have seen multiple threads on the internet on your posted error message in combination with CDO. The above idea was one of the things I found. Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
pdvos Posted March 7, 2020 Author Share Posted March 7, 2020 Yeah I think it's purely a cdo issue and since it's deprecated no fix from ms. And in our environment we can deal with it. Still thank you for trying Link to comment Share on other sites More sharing options...
Jemboy Posted September 24, 2022 Share Posted September 24, 2022 Just confirming On 3/6/2020 at 4:29 PM, pdvos said: The Change didn't work didn't work. Narrowed if further down Control Panel\Clock and Region => Region Format: English(United States) and English(United Kingdom) - works Format: English(Netherlands) - doesn't work Have been hours trying to send some e-mali through Gmail via the same UDF and I can confirm that @pdvos workaround **changing format to: English(United States) ** is working. Alas this is not a solution for me, so I am gonna keep looking for a solution without using CDO. Link to comment Share on other sites More sharing options...
robertocm Posted September 26, 2022 Share Posted September 26, 2022 On 9/24/2022 at 11:55 AM, Jemboy said: am gonna keep looking for a solution without using CDO A possible alternative: https://inveigle.net/cmail https://www.inveigle.net/blog/cmail-history Jemboy 1 Link to comment Share on other sites More sharing options...
Jemboy Posted September 26, 2022 Share Posted September 26, 2022 Thanks. Always nice to have extra options, although I like solutions which are completely AutoIt native. For now I have chose to go with the setting English(United Kingdom) because it keeps my regional settings as "Europe". I hope though that some brilliant person will find a fix to use CDO for all languages/character sets. 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