2016-08-31 8 views
-1

次のコードでエラーを見つけようとしています。関数 "_Mail"は、別のスクリプトであれば完璧に動作しますが、エラーを表示する関数に入力するとすぐに機能します。AutoIT send E-mail error

コードを修正する方法と、エラーが修正されたフレーズを貼り付ける方法を教えてください。

#Include <file.au3> 
#include <EditConstants.au3> 
#include <GUIConstantsEx.au3> 
#include <StaticConstants.au3> 
#include <ButtonConstants.au3> 
#include <WindowsConstants.au3> 

;GUI 
$Form1 = GUICreate("Form1", 317, 168, -1, -1) 
$Label = GUICtrlCreateLabel("Label", 32, 8, 253, 29) 
GUICtrlSetFont(-1, 15, 800, 4, "MS Sans Serif") 
$Input1 = GUICtrlCreateInput("Input1", 68, 48, 185, 24) 
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") 
$Input2 = GUICtrlCreateInput("Input2", 68, 80, 185, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) 
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") 
$Button = GUICtrlCreateButton("Button", 102, 120, 113, 33) 
GUISetState(@SW_SHOW) 
;GUIend 

Func _Mail() 
    ;################################## 
    ; Variables 
    ;################################## 
    $SmtpServer = "smtp.email.com"    ; address for the smtp-server to use - REQUIRED 
    $FromName = "Name"      ; name from who the email was sent 
    $FromAddress = "[email protected]" ; address from where the mail should come 
    $ToAddress = "[email protected]" ; destination address of the email - REQUIRED 
    $Subject = "TEST"     ; subject from the email - can be anything you want it to be 
    $Body = "TEST TEST TEST"        ; 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 = "[email protected]"     ; username for the account used from where the mail gets sent - REQUIRED 
    $Password = "Password"     ; password for the account used from where the mail gets sent - REQUIRED 
    $IPPort = 465       ; 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 
EndFunc 

While 1 
    $nMsg = GUIGetMsg() 
    Switch $nMsg 
     Case $GUI_EVENT_CLOSE 
      Exit 
     Case $Button 
      _Mail() 
    EndSwitch 
WEnd 

答えて

0

関数内で関数を宣言することはできません! スクリプトは次のようになります。

#Include <file.au3> 
#include <EditConstants.au3> 
#include <GUIConstantsEx.au3> 
#include <StaticConstants.au3> 
#include <ButtonConstants.au3> 
#include <WindowsConstants.au3> 

Global $oMyRet[2] 
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") 

;GUI 
$Form1 = GUICreate("Form1", 317, 168, -1, -1) 
$Label = GUICtrlCreateLabel("Label", 32, 8, 253, 29) 
GUICtrlSetFont(-1, 15, 800, 4, "MS Sans Serif") 
$Input1 = GUICtrlCreateInput("Input1", 68, 48, 185, 24) 
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") 
$Input2 = GUICtrlCreateInput("Input2", 68, 80, 185, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) 
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") 
$Button = GUICtrlCreateButton("Button", 102, 120, 113, 33) 
GUISetState(@SW_SHOW) 
;GUIend 

While 1 
    $nMsg = GUIGetMsg() 
    Switch $nMsg 
     Case $GUI_EVENT_CLOSE 
      Exit 
     Case $Button 
      _Mail() 
    EndSwitch 
WEnd 


Func _Mail() 
    ;################################## 
    ; Variables 
    ;################################## 
    Local $SmtpServer = "smtp.email.com"    ; address for the smtp-server to use - REQUIRED 
    Local $FromName = "Name"      ; name from who the email was sent 
    Local $FromAddress = "[email protected]" ; address from where the mail should come 
    Local $ToAddress = "[email protected]" ; destination address of the email - REQUIRED 
    Local $Subject = "TEST"     ; subject from the email - can be anything you want it to be 
    Local $Body = "TEST TEST TEST"        ; the messagebody from the mail - can be left blank but then you get a blank mail 
    Local $AttachFiles = ""      ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed 
    Local $CcAddress = ""  ; address for cc - leave blank if not needed 
    Local $BccAddress = ""  ; address for bcc - leave blank if not needed 
    Local $Importance = "Normal"     ; Send message priority: "High", "Normal", "Low" 
    Local $Username = "[email protected]"     ; username for the account used from where the mail gets sent - REQUIRED 
    Local $Password = "Password"     ; password for the account used from where the mail gets sent - REQUIRED 
    Local $IPPort = 465       ; port used for sending the mail 
    Local $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 
    ;################################## 
    $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 
EndFunc 

; 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() 
    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); something to check for when this function returns 
    Return 
EndFunc ;==>MyErrFunc