Problema para enviar e-mail
Publicado: 23 Mar 2009, 20:53
Hola
Estoy haciendo una aplicación, que envíe e-mails.
Viendo que la función que escribí hace ya algún tiempo para tal efecto y que colgué en el foro no se lleva muy bien con los archivos adjuntos (no entiendo el por que), he buscado una librería o función en el foro inglés de autoit para enviar e-mails y encontré algo como esto.
Pero al ejecutarlo me devuelve un error, diciendo que no se ha podido conectar con el servidor smtp.
El servidor que utilizo necesita autentificaicón (debe loguearse con usuario y contraseña codificados en Base64). no se si este código lo hará, pues hay muchas cosas que no entiendo... en cualquier caso lo he probado de todas las maneras:
codificando el usuario y la contraseña en Base64, pasando la dirección del servidor a ip (en vez de nombre de dominio) etc etc y nada, siempre obtengo el mismo error...
¿alguien sabe otro código que funcione bien y permita adjuntar archivos en un e-mail?
Porque ese es el único problema de la función que hice. Que misteriosamente no adjunta bien los archivos. Por lo demás funciona bien.
Gracias de antemano,
salu2!
Estoy haciendo una aplicación, que envíe e-mails.
Viendo que la función que escribí hace ya algún tiempo para tal efecto y que colgué en el foro no se lleva muy bien con los archivos adjuntos (no entiendo el por que), he buscado una librería o función en el foro inglés de autoit para enviar e-mails y encontré algo como esto.
Código: Seleccionar todo
#include <Array.au3>
#include <File.au3>
#include <String.au3>
Global $Server="servidor_smtp"
Global $Name="nombre"
Global $FromAddress="direcion_del_remitente"
Global $ToAddress="direccion_del_destinatario"
Global $Subject="asunto"
Global $Body="cuerpo del mensaje"
Global $Attach="aqui_archivos_adjuntos_si_se_desea"
Global $CCAddress="cc"
Global $BCCAddress="bcc"
Global $Importance="normal"
Global $User="usuario_para_loguearse_en_el_servidor"
Global $Password="contraseña_para_loguearse_en_el_servidor"
Global $Port=25
Global $Ssl=0
Global $MSend
Global $OMyRet[2]
Global $OMyError=ObjEvent("AutoIt.Error", "MyErrFunc")
$mSend=_INetSmtpMailCom($Server, $Name, $FromAddress, $ToAddress, $Subject, $Body, $Attach, $CCAddress, $BCCAddress, $Importance, $User, $Password, $Port, $Ssl)
msgbox(0, "", $MSend)
Exit
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])
If FileExists($S_Files2Attach[$X]) Then
$ObjEmail.AddAttachment ($S_Files2Attach[$X])
Else
SetError(1)
Return "Archivo no encontrado: "&$S_Files2Attach[$X]
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
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
$ObjEmail.Configuration.Fields.Update
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
$ObjEmail.Send
If @Error Then
SetError(2)
Return $OMyRet[1]
EndIf
$ObjEmail=""
EndFunc
Func MyErrFunc()
$HexNumber=Hex($OMyError.number, 8)
$OMyRet[0]=$HexNumber
$OMyRet[1]=StringStripWS($OMyError.description, 3)
SetError(1)
Return $OMyRet[1]
EndFunc
El servidor que utilizo necesita autentificaicón (debe loguearse con usuario y contraseña codificados en Base64). no se si este código lo hará, pues hay muchas cosas que no entiendo... en cualquier caso lo he probado de todas las maneras:
codificando el usuario y la contraseña en Base64, pasando la dirección del servidor a ip (en vez de nombre de dominio) etc etc y nada, siempre obtengo el mismo error...
¿alguien sabe otro código que funcione bien y permita adjuntar archivos en un e-mail?
Porque ese es el único problema de la función que hice. Que misteriosamente no adjunta bien los archivos. Por lo demás funciona bien.
Gracias de antemano,
salu2!