FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Mandar EMail con componentes Indy
Buenas. Estoy diseñando una aplicación para un cibercafé, y en la sección de clientes me interesa tener la opción de enviar correos. El caso es que no consigo que funcione, y he probado (creo) todos los ejemplos del foro, incluido los que vienen en el libro La Biblia de Delphi 7. El código que tengo es el siguiente:
Código:
procedure TvZonaClientes.cmdEnviarClick(Sender: TObject); begin // Creo el mensaje mailMensaje.Subject:=txtAsunto.Text; mailMensaje.Body.SetText(memoMensaje.Lines.GetText); mailMensaje.From.Name:='La Empresa'; mailMensaje.Recipients.EMailAddresses:=vModuloDatos.DataSetClientesEMAIL.AsString; mailMensaje.Priority:=TidMessagePriority(mpHighest); // Configuro la conexión indySMTP.Host:='192.168.0.2'; indySMTP.Port:=25; indySMTP.AuthenticationType:=atNone; // Conecto y envío el correo try indySMTP.Connect; try indySMTP.Send(mailMensaje); finally showmessage('El mensaje se envió correctamente'); end; except showmessage('Se produjo un fallo durante el envío del mensaje'); end; // Desconecto if indySMTP.Connected then indySMTP.Disconnect; end;
__________________
IncestoCanibal.com |
#2
|
|||
|
|||
Las Indy precisamente traen una demo de un programa que es un gestor de correo. Míratelo que seguro te instruye
..\Indy9\Demos\IndyDemos\MailClient |
#3
|
||||
|
||||
Me parece que el problema podría estar en el hecho de que no todos los clietes SMTP te permitirán mandar correos sin autenticarte (AuthenticationType = atNone) y tienes que hacerlo con nombre de usuario y contraseña.
// Saludos |
#4
|
|||
|
|||
La forma mas sencilla de mandar ese mail (si el servidor de correo no necesita authentificacion smtp es):
Código:
procedure TvZonaClientes.cmdEnviarClick(Sender: TObject); begin TIdSmtp.QuickSend( '192.168.0.2', txtAsunto.Text, vModuloDatos.DataSetClientesEMAIL.AsString, 'miEmpresa@midominio.com', memoMensaje.Lines.Text ); end; mensaje por el hecho de venir de una direccion de correo no valida en tu caso en el "From" no estas indicando un email valido. Saludos |
#5
|
|||
|
|||
Buenas de nuevo. En principio gracias por la velocidad en responder.
Desesperado, he optado por lo que he comentado Mick, he escrito el siguiente código: Código:
// Activo el servidor if not serverSMTP.Active then serverSMTP.Active:=True; // Conecto el cliente y envío el mensaje indySMTP.Connect; indySMTP.QuickSend('192.168.0.2', txtAsunto.Text, 'mi_cuenta_1@hotmail.com', 'mi_cuenta_2@hotmail.com', memoMensaje.Lines.Text); Hay algo que estoy haciendo mal y creo que es fallo mio de concepto. Uso como host 192.168.0.2 por ser la IP de mi PC, para que lo mande a través del servidor de la propia aplicación, el cual tan sólo tengo activado, es decir, insertado el control y activado desde código. ¿Tengo que configurarle algo al servidor? ¿Dónde meto la pata? Creo que es la teoría la que no tengo bien agarrada, y fallo por culpa de eso.
__________________
IncestoCanibal.com |
#6
|
|||
|
|||
Da la impresion de que estas complicando el tema mas de lo necesario.
El QuickSend es un metodo de clase de modo que no tienes que crear ni soltar en el form ningun componente. Literalemente debes indicar: TIdSMTP.QuickSend( ... ) SIN CREAR NINGUN COMPONENTE, te sobra el componente indySMTP y el serverSMTP, se indica directamente "TidSMTP" (el nombre de la clase, nada mas). Como mucho debes indicar "uses idSMTP" en el .pas donde quieras usar el metodo quicksend. Saludos |
#7
|
||||
|
||||
5.5.4 Invalid Address
Este error me da cuando le asigno varias direcciones de correo, estas las envio en una variable string separando las direcciones por ";".
Si alguien sabe comente..... |
#8
|
||||
|
||||
porque no probas usando la Opcion ADD y verificando con unas pocas.
por ahi el problema esta en ";" o en le metodo de enviarlas.
Última edición por Enan0 fecha: 30-09-2010 a las 09:40:36. |
#9
|
||||
|
||||
Resuleto
Gracias EnanO, al final lo resolvi de la siguiente manera y asi puedo continuar generando los correos en un string separados por ";".
Texto := Para; NPara := ''; Repeat NPara := copy(Texto,1,pos(';',Texto)-1); Texto := copy(Texto,pos(';',Texto)+1,Length(Texto)); if NPara <> '' then PostMessage.Recipients.Add.Address := NPara else PostMessage.Recipients.Add.Address := Texto; Until NPara = ''; |
|
|
|