Página 1 de 1

Problema para enviar e-mail

Publicado: 23 Mar 2009, 20:53
por Jonny
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.

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
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!

Re: Problema para enviar e-mail

Publicado: 23 Mar 2009, 21:22
por BasicOs
Hola,
prueba con varios correos mejor, es posible que tengas que configurar esta parte:
$Port, $Ssl=1/0
Salu2:)

Re: Problema para enviar e-mail

Publicado: 23 Mar 2009, 23:40
por Jonny
Hola

Esa parte, está bien configurada (si no entendí mal, ssl=0 es no utilizar ssl) y el puerto está en 25....

toqueteando el código, conseguí que apareciera otro error.
qe en resumen viene a decir, qe el servidor smtp devolvió "not available".
¿Porqué ocurre eso?

En cualquier caso, al armar el código en el programa que estoy haciendo no puede conectarse, siendo la misma cofniguración.

Salu2!

Re: Problema para enviar e-mail

Publicado: 24 Mar 2009, 02:25
por Chefito
Asegurate bien del puerto. Al utilizar ssl, intentalo con el puerto 465, no con el 25. Supongo que así te debe conectar bien.
Pero a las malas, también puedes intentarlo con el puerto 587.

Si sigues teniendo problemas, si me das los datos de un servidor y una cuenta, intentaré hacer pruebas :smt003 .

Saludos.

Re: Problema para enviar e-mail

Publicado: 24 Mar 2009, 07:38
por Jonny
Hola

En éste script, la variable $Ssl si vale 0, significa que no debe conectarse mediante ssl ¿Verdad? o es 1?.
Yo lo puse a 0 y el puerto 25, que creo que es lo correcto.

Chefito, puedes seguir probando con la misma cuenta que lo hiciste con la librería pop3 (no se si aún tienes los datos)

En cualquier caso
¿Se os ocurre porqué puede ser que con la función que escribí para el foro al adjuntar archivos sale el código html en el mensaje al ver el e-mail en un cliente de correo?, ¿y por que no adjunta correctamente el archivo?...

Gracias,

Salu2!

Re: Problema para enviar e-mail

Publicado: 25 Mar 2009, 17:35
por Chefito
Pues a mi con estos datos el código que has colgado funciona perfectamente:

Código: Seleccionar todo

Global $Server="mail.ivermedia.com"
Global $Name="IVERMEDIA"
Global $FromAddress="direcion_del_remitente"
Global $ToAddress="[email protected]"
Global $Subject="ENVIO BUENO DESDE AUTOIT"
Global $Body="PRUEBAS PARA ENVIO DE MENSAJES MENDIANTE AUTOIT"
Global $Attach="C:\BACKGROUND.JPG"
Global $CCAddress="";cc"
Global $BCCAddress="";bcc"
Global $Importance="";normal"
Global $User="[email protected]"
Global $Password="cvkjsp0lvk9"
Global $Port=25
Global $Ssl=0
Global $MSend
Global $OMyRet[2]
Global $OMyError=ObjEvent("AutoIt.Error", "MyErrFunc")
Envia perfectamente el mensaje....su mensaje y archivo (mensaje número 6).
También he enviado un mensaje sin archivo y ha funcionado perfectamente (mensaje 5).

Lo que he comprobado es que la información que envia este método, no es la misma que con los otros métodos que utilizamos tú y yo en su día (yo utilicé el hotmail por webmail para enviar mensajes), por lo tanto no funcionan las funciones que hice :smt009 . Solamente van las de la información del mensaje y la que te dice si hay o no archivos adjuntos. Las de devolverte el cuerpo del mensaje y la de devolverte los archivos no :smt022 . Habría que variarlas.

Ya te dije en su día que podía ser que enviandolo con otros gestores de correo electrónico, otros métodos, librerías, controles, etc podría variar el texto interno del mensaje y joder todas las funciones que hice. Y eso es lo que ha pasado.
Jonny escribió:En éste script, la variable $Ssl si vale 0, significa que no debe conectarse mediante ssl ¿Verdad? o es 1?.
Digamos que es distinto de 1 para no conectarse po ssl (normalmente se utiliza el 0), y el 1 para conectarse. Pero yo me he conectado sin ssl y lo ha enviado bien.

Saludos.

Re: Problema para enviar e-mail

Publicado: 25 Mar 2009, 20:21
por Jonny
Hola

pues no lo entiendo, rebisaré el código, a ver que pasa...

buf.
tendría que ver que texto envía, en cuanto que pueda lo miro...

Personalmente, Me gustaría más usar la función que desarrollé en su día para enviar e-mails, pero como dige no va muy fina con archivos adjuntos...

Digo yo, que alguna forma tiene que haber para las funciones que hiciste y que no haya que modificarlas según el gestor de correo que envie el e-mail.

Salu2!

Re: Problema para enviar e-mail

Publicado: 20 Ago 2011, 19:12
por melvinhn
Yo tambien he probado el codigo y me ha funcionado de marabilla..

oye pero como harias para adjuntar dos archivos

de antemano gracias por tu tiempo

Re: Problema para enviar e-mail

Publicado: 23 Ago 2011, 13:22
por Chefito
Mmmmm.....te voy a decir algo sin hacer pruebas ni nada (ni mirar en ningún sitio). No se si será así. Has probado a separar los archivos con punto y coma?. Ejemplo: "c:\archivo1.txt;c:\archivo2.txt". Puede que esto funcione. Ya me dirás si funciona o no para saberlo todos.

Saludos.

Re: Problema para enviar e-mail

Publicado: 23 Ago 2011, 14:08
por Jonny
Hola

No se me pasó en su día esta posibilidad por la cabeza (creo) :). Hace mucho de este post...

Pero, me suena algo de que efectivamente, separando las rutas de los archivos adjuntos por ; se añadían todos los que se indicaran en ese parámetro.

Salu2!

Re: Problema para enviar e-mail

Publicado: 23 Ago 2011, 21:35
por melvinhn
Muchas gracias por su ayuda si no fuera por personas como ustedes uno no avanzaria del paso donde se encuentra en programacion
habia intentado con & y con Or y con And pero todos me salia en error muchas gracias
al final su repuesta era la correpta con el ;

Re: Problema para enviar e-mail

Publicado: 25 Ago 2011, 07:27
por melvinhn
Muchas gracias para el que quiera hacerlo utilizando ruta de macros

@HomeDrive&"\Uno.txt"&";"&@HomeDrive&"\Dos.txt"

y asi sucesivamente

Re: Problema para enviar e-mail

Publicado: 10 Oct 2013, 12:50
por MAA
Me habéis ayudado mucho gracias.

Re: Problema para enviar e-mail

Publicado: 04 Ago 2015, 17:55
por rovic
Disculpen si este no es el mejor lugar para publicar este problema pero si me pudieran ayudar se lo agradecería mucho. El tema es que recien instalé la última versión del SciTE que está pública en el sitio oficial y cuando voy a trabajar con el objeto ObjCreate("CDO.Message") que tiene una propiedad con el nombre "To" me da bateo, pense que podía ser algún error en el codigo y después de probar entre otras cosas, otras keywords (.while, .for) no me dio problemas. Al parecer el "AU3Check (3.3.12.0)" detecta el uso de esta keyword como propiedad del objeto como un error. Agradecería cualquier tipo de ayuda para solucionar este tipo de problemas.