email - Enviar un correo electrónico con AutoIt
(4)
Hay dos formas principales de ir con código incorporado, _INetMail () o _INetSmtpMail ()
A continuación se encuentran los ejemplos de código simple del archivo de ayuda. Si tiene preguntas específicas sobre cómo funcionan o cómo implementarlas que no están cubiertas por el archivo de ayuda, por favor deje un comentario.
En mi opinión, la ruta _INetSmtpMail () es más razonable. A continuación se muestra un código de ejemplo de la misma.
#include <INet.au3>
$s_SmtpServer = "mysmtpserver.com.au"
$s_FromName = "My Name"
$s_FromAddress = "From eMail Address"
$s_ToAddress = "To eMail Address"
$s_Subject = "My Test UDF"
Dim $as_Body[2]
$as_Body[0] = "Testing the new email udf"
$as_Body[1] = "Second Line"
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
$err = @error
If $Response = 1 Then
MsgBox(0, "Success!", "Mail sent")
Else
MsgBox(0, "Error!", "Mail failed with error code " & $err)
EndIf
El método _INetMail () que utiliza el cliente de correo incorporado registrado en Windows.
#include <INet.au3>
$Address = InputBox(''Address'', ''Enter the E-Mail address to send message to'')
$Subject = InputBox(''Subject'', ''Enter a subject for the E-Mail'')
$Body = InputBox(''Body'', ''Enter the body (message) of the E-Mail'')
MsgBox(0,''E-Mail has been opened'',''The E-Mail has been opened and process identifier for the E-Mail client is '' & _INetMail($address, $subject, $body))
¿Cómo enviar un correo electrónico con AutoIt? Solo necesito un ejemplo y una explicación claros, que contengan:
- a
- de
- tema
- mensaje
Al igual que con el servidor de Lotus Domino, necesitaba $s_first = -1
para mi servidor de Exchange.
Además, mi servidor está configurado NO para retransmitir y no puedo enviarlo a una dirección de correo electrónico externa, ya que se considera retransmisión. ( $ToEmail
)
$body = _ArrayCreate ("line 1", "Line 2", "Line 3")
$rc = _INetSmtpMail ($server, $FromName, $FromEmail, $ToEmail, $subject, $body, "", -1)
Si desea enviar un correo electrónico con AutoIt, debe elegir el método Microsoft CDO. No use la automatización de correo del cliente (Outlook, Thunderbird u otro). La principal ventaja de CDO es que no depende del programa de correo del cliente que utilice. Solo depende del servidor SMTP.
Puede usar la función _INetSmtpMail en librairy AutoIt Inet.au3. Pero si desea controlar cualquier cosa, puede utilizar esta función definida por el usuario _INetSmtpMail a continuación:
Archivo UDF Autoit: UDF_SMTP_eMail.au3
;==============================================================================================================
; Description : Send an email with a SMTP server by Microsoft CDO technology
; Parametere : $s_SmtpServer
; $s_FromName
; $s_FromAddress
; $s_ToAddress
; $s_Subject
; $as_Body
; $s_AttachFiles (path file to join)
; $s_CcAddress
; $s_BccAddress
; $s_Username
; $s_Password
; $IPPort
; $ssl
; Return : On success none
; On error code+msg
;==============================================================================================================
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)
Local $objEmail = ObjCreate("CDO.Message")
Local $i_Error = 0
Local $i_Error_desciption = ""
$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
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
;===========================================================================================================
Aquí hay una variante de lo que Copas describió. Debe enviar automáticamente para usted
#include <INet.au3>
$time1 = _NowTime()
$Address = "" ;To Address
$Subject = ""
$Body = ""
_INetMail($address, $subject, $body)
Local $hWnd = WinWait("[CLASS:rctrl_renwnd32]", "", 2) ;Works with Outlook 2013. Class might vary. Use the info tool to be sure. Eg I seriously doubt it will be the same with something like thunderbird.
ControlClick($hWnd, "", "Button1")