2016-03-22 121 views
0

Gmailを使用して(AutoItを使用して)電子メールを送信したいが、TLSを有効にする方法がわからない。私のコードはエラー(4)を返します:AutoItを使用して電子メールを送信

#include <Inet.au3> 
#include <MsgBoxConstants.au3> 
#Include<file.au3> 

Local $sSMTPServer = "smtp.gmail.com"; 
Local $sFromName = "Emeka"; 
Local $sFromAddress = "[email protected]"; 
Local $sToAddress = "[email protected]"; 
Local $sSubject  = "AuToIT"; 
Local $aBody[1]  = "Test "; 

Local $iResponse = _INetSmtpMail($sSMTPServer, $sFromName, $sFromAddress,$sToAddress, $sSubject, $aBody) 
Local $iErr   = @error 

If $iResponse = 1 Then 

    MsgBox($MB_SYSTEMMODAL, "Success!", "Mail sent") 

Else 

    MsgBox($MB_SYSTEMMODAL, "Error!", "Mail failed with error code " & $iErr) 

EndIf 

私のメールが送信されないのはなぜですか?あなたがGoogleのSMTP設定を確認する必要が

+1

をメールを送信するには、この簡単な方法を発見し、検索した後、しかし、これはGoogleのサーバーによって許可されていません。あなたはTLSを含めるために '_INetSmtpMail'関数を少し書き直さなければなりません。 – Matt

+1

解決策の1つは、COMオブジェクトを使用して完全に別のメソッドを使用することです。 [こちら](https://www.autoitscript.com/forum/topic/23860-smtp-mailer-that-supports-html-and-attachments/#comment-166575)。 – Matt

+1

参考までに、[AutoIt Forums](https://www.autoitscript.com/forum/topic/181415-error-4-auto-it-email/)に質問がありました。 – Matt

答えて

0

私は難しいのポート25に接続するようにコーディングされている機能では

に_Sendmail()

Func _Sendmail() 

    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 
     Local $sSmtpServer = "smtp.gmail.com" ; address for the smtp-server to use - REQUIRED 
     Local $sFromName = "Sender name" ; name from who the email was sent 
     Local $sFromAddress = "Sender Mail" ; address from where the mail should come 
     Local $sToAddress = "[email protected]" ; destination address of the email - REQUIRED 
     Local $sSubject = "Subject" ; subject from the email - can be anything you want it to be 
     Local $sBody = "Body" ; 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 = "High" ; Send message priority: "High", "Normal", "Low" 
     Local $sUsername = "[email protected]" ; username for the account used from where the mail gets sent - REQUIRED 
     Local $sPassword = "Gmail Password" ; 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 
      Dim $iMsgBoxAnswer 

      $iMsgBoxAnswer = MsgBox(262208, "SUCCESS", ":-)", 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_E 
+4

ようこそスタックオーバーフロー!なぜメールを送信するのが最良の方法です、このスクリプトの利点は何ですか?あなたの回答を編集して[回答] –

+0

[他人が書いた資料を参照する方法](https://stackoverflow.com/help/referencing)をチェックしてください。 – user4157124

関連する問題