Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2004
verm83 verm83 is offline
Miembro
 
Registrado: nov 2003
Posts: 28
Poder: 0
verm83 Va por buen camino
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;
Siendo indySMTP y mailMensaje, un TIdSMTP y un TIdMessage de las librerías Indy respectivamente. He agregado también un IdSMTPServer, por eso indico en indySMTP.Host la IP local del equipo. El caso es que el correo no se envía. Casi siempre se muestra el mensaje de que se ha enviado, pero realmente no es así. Al servidor SMTP no le tengo configurado nada. estoy intentando mandar correos a @hotmail.com y @lycos.es y no funciona en ninguno. ¿Alguien me puede echar un cable? No tengo ni idea de lo que hago mal, o no no hago. Muchas gracias anticipadas.
__________________
IncestoCanibal.com
Responder Con Cita
  #2  
Antiguo 10-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 10-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #4  
Antiguo 11-04-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
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;
Otra cosa, muchos servidores de correo podrian descartar el
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
Responder Con Cita
  #5  
Antiguo 11-04-2004
verm83 verm83 is offline
Miembro
 
Registrado: nov 2003
Posts: 28
Poder: 0
verm83 Va por buen camino
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);
Ahora por lo menos hace el ademán, que antes ni eso, pero me devuelve el siguiente error: Excepción de la clase EIdTCPServerError, con el mensaje "No OnReceiveRaw defined"

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
Responder Con Cita
  #6  
Antiguo 11-04-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 11-04-2004
verm83 verm83 is offline
Miembro
 
Registrado: nov 2003
Posts: 28
Poder: 0
verm83 Va por buen camino
Lo acabo de probar, lo que me comentas, pero me devuelve el fallo "Connection Closed Gracefully", que ya me pasó días atrás. En lo referente al servidor web, lo tenía puesto porque no quería depender de ningún server SMTP externo, ni de ninguna cuenta de correo; no quiero que mi aplicación haga de "frontend", sino que fuese capaz de enviar correos por sí sóla, sin depender de nada.
__________________
IncestoCanibal.com
Responder Con Cita
  #8  
Antiguo 14-04-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Lo que te da es una excepcion, lo que no significa que sea un error,
Indy informa de muchas cosas utilizando el mecanismo de excepciones,
normalmente esa excepcion indica que la conexion se ha cerrado correctamente de modo que el mail debería haberse enviado sin problemas.
Utiliza un bloque try except para interceptar y comprobar las excepciones o si no quieres que te salte esa excepcion, actualizate a una version mas moderna de Indy (creo que en las ultimas versiones, habian eliminado la posibilidad de que se produjese esa excepcion).
Responder Con Cita
  #9  
Antiguo 15-04-2004
verm83 verm83 is offline
Miembro
 
Registrado: nov 2003
Posts: 28
Poder: 0
verm83 Va por buen camino
Al final lo he conseguido solucionar siguiendo el ejemplo del SMTP Relay que viene con Indy. Es mucho más complejo, pero funciona. Lo que hace es enviar correos, partiendo de un email de como sender y una IP de un servidor DNS. La única pega que le he visto es que le cuesta siempre varios intentos, devolviendo la excepción "Connection Closed Gracefully" en los casos de envío negativo, pero funcionar funciona. Muchas gracias a todos por la ayuda.
__________________
IncestoCanibal.com
Responder Con Cita
  #10  
Antiguo 22-08-2010
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 19
MaxiDucoli Va por buen camino
Relay

Cita:
Empezado por verm83 Ver Mensaje
Al final lo he conseguido solucionar siguiendo el ejemplo del SMTP Relay que viene con Indy. Es mucho más complejo, pero funciona. Lo que hace es enviar correos, partiendo de un email de como sender y una IP de un servidor DNS. La única pega que le he visto es que le cuesta siempre varios intentos, devolviendo la excepción "Connection Closed Gracefully" en los casos de envío negativo, pero funcionar funciona. Muchas gracias a todos por la ayuda.
Como hiciste para poder conectarte??
Me pasarias las lineas del source please??
Gracias!

Hace 2 días que quiero enviar mails usando mi PC como server pero nada
Responder Con Cita
  #11  
Antiguo 29-09-2010
Avatar de suzely
suzely suzely is offline
Registrado
 
Registrado: nov 2005
Ubicación: Mixco, Guatemala
Posts: 6
Poder: 0
suzely Va por buen camino
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.....
Responder Con Cita
  #12  
Antiguo 30-09-2010
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
porque no probas usando la Opcion ADD y verificando con unas pocas.

por ahi el problema esta en ";" o en le metodo de enviarlas.

Código Delphi [-]
//asignar tu variable

Recipients.EMailAddresses:=

// o de auno

for i:=0 to list.count-1 do  begin
IdMessage1.recipients.add;
IdMessage1.Recipients.Items[i].Address:=list[i];
end;

// Suponiendo que tus direcciones las tenes en un StringList.

Última edición por Enan0 fecha: 30-09-2010 a las 10:40:36.
Responder Con Cita
  #13  
Antiguo 30-09-2010
Avatar de suzely
suzely suzely is offline
Registrado
 
Registrado: nov 2005
Ubicación: Mixco, Guatemala
Posts: 6
Poder: 0
suzely Va por buen camino
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 = '';
Responder Con Cita
  #14  
Antiguo 10-09-2017
master2009 master2009 is offline
Miembro
 
Registrado: feb 2009
Posts: 3
Poder: 0
master2009 Va por buen camino
Cita:
Empezado por verm83 Ver Mensaje
Al final lo he conseguido solucionar siguiendo el ejemplo del SMTP Relay que viene con Indy. Es mucho más complejo, pero funciona. Lo que hace es enviar correos, partiendo de un email de como sender y una IP de un servidor DNS. La única pega que le he visto es que le cuesta siempre varios intentos, devolviendo la excepción "Connection Closed Gracefully" en los casos de envío negativo, pero funcionar funciona. Muchas gracias a todos por la ayuda.
Me parece de muy mal gusto que verm83, despues de haber solicitadp guia en el foro, no haya respondido a la pregunta de si podia dejar el codigo de como lo soliciono. Y si, tengo el problema de enviar correo. Por eso lo menciono.
Responder Con Cita
  #15  
Antiguo 10-09-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, lee nuestra guía de estilo, gracias.

Y por cierto, no se entiende lo que dices, aunque este tema sea de hace 7 años.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:58:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi