Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   IdSmtp (https://www.clubdelphi.com/foros/showthread.php?t=8343)

VolaRe 18-03-2004 11:16:54

IdSmtp
 
Hola,
Estoy empezando a utilizar los componentes indy, estoy intentando hacer una aplicacion para enviar mails, pero no consiguo que envie na de na, conecta y despues de un rato me dice conexion cerrada graciosamente, ¿alguien me puede decir que estoy haciendo mal?.

Yo solo pongo la direccion de correo y el asunto con su correspondiente mensaje, claro, hay que indicarle alguna ip y algun usuario, de ser asi que ipe le asigno la mia o a donde quiero que llegue. Os agradeceria que me lo aclaraseis un poco, gracias.

Pongo en el formulario IdSmtp y IdMessage

Nuria 18-03-2004 13:11:41

Hola volare!

El Mensaje se configura de la siguiente manera:

Código:

with idMessage do begin
    // Cuerpo del mensaje.
    Body.Clear;
    Body.Add('Aqui añades el cuerpo del mensaje);
    // Cuenta Origen.
    From.Text := EMAILORIGEN;
    // Cuenta Destino.
    Recipients.EMailAddresses := EMAILDESTINO;
    // Asunto del email.
    Subject := ASUNTO;
    // Prioridad del mensaje, ALTA.
    Priority := TidMessagePriority(mpHighest);
    // Coloco el archivo adjunto el cual enviar.
    TidAttachment.Create(idMensage.MessageParts,ARCHIVOADJUNTO);
  end;

Y el idSMPT :

Código:

with idSMPT do begin
  // Configuro autentificación.
  AuthenticationType := atLogin;
  Username := USERNAME;  // Nombre del usuario
  Password := PASS;  // la password
  // Configuro el servidor SMTP.
  Host := HOST;
  Port := PUERTO;
 
  try
    Connect;
    try
      // Envio el mensaje.
      Send(idMenssage);
    finally
      Disconnect;
    end;
    Msg('Enviado Correctamente');
  except
    // Capturo algunas excepciones que pueden ocurrir
    ON E: EIdProtocolReplyError do begin
      Msg('No se ha podido enviar el email.' + #13 +
          'Incorrecto el email o el usuario o la password.');
    end;
    on E: EFOpenError do begin
      Msg('No se ha podido enviar el email.' + #13 +
          'Fichero Adjunto desconocido o erróneo.');
    end;
    on E: EIdSocketError do begin
      Msg('No se ha podido enviar el email.'+ #13 +
          'Host desconocido o incorrecto.');
    end
    else begin
      Msg('Fallo en el envio de email');
    end;
  end;
  if connected then Disconnect;
end

Espero que te sirva.

Salu2!

VolaRe 18-03-2004 20:13:29

No me reconoce los identificadores EIdProtocolReplyError y EIdSocketError, algun comentario de lo que pueda ser??. Otra cosa sabes de alguna pag. que explique estos tipos de errores y que los enumere uno a uno??.

Te paso mi codigo y me dices si ves algo mal, en host eh puesto mi ip y el puerto eh dejado el que viene por defecto el 25

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdMessage1.Body.Clear;
  //el texto del mensaje
  IdMessage1.Body.Add(Memo1.Lines.Text);
  //direccion en donde quiero enviarlo
  IdMessage1.ReceiptRecipient.Address := Edit1.Text;
  //el asunto
  IdMessage1.Subject := Edit2.Text;
  IdSmtp1.Connect;
  IdSmtp1.Send(idMessage1);
  IdSmtp1.Disconnect;
end;

end.

Espero que me digais donde esta el fallo, porque yo ya lo doy por imposible, gracias

roman 19-03-2004 20:08:19

Cita:

Empezado por VolaRe
No me reconoce los identificadores EIdProtocolReplyError y EIdSocketError, algun comentario de lo que pueda ser

No te los reconoce seguramente porque están declarados en alguna unidad que no incluyes en la clásula uses.

La regla de oro para lidiar con este tipo de errores en un código que provenga de una fuente confiable- como evidentemente es el caso -es usar la opción "Find in Files..." del menú "Search" para localizar la unidad adecuada que, en este caso, resulta ser IdException.

// Saludos

VolaRe 19-03-2004 20:36:23

gracias roman,
despues de solucionar este pequeño error, cuando envio el mail me indica, fallo en el envio de mail, a que puede ser que no me envie el mail???.

Ahora ya sabemos que no es de host ni de pass ni de socket, es de mail, que es lo que significa esto??? pues no tengo ni idea, haber si me respondeis, os lo agradeceria.

Y a ti nuria gracias por todo el codigo puesto, sobre todo por las excepciones, que no sabia ni que existieran.

roman 19-03-2004 21:50:15

Cita:

Empezado por VolaRe
despues de solucionar este pequeño error, cuando envio el mail me indica, fallo en el envio de mail, a que puede ser que no me envie el mail???.

En el código de Nuria agrega la instrucción raise inmediatamente debajo de la línea que manda el mensaje:

Código:

else begin
  Msg('Fallo en el envio de email');
  raise;
end;

Esto es porque el try-except-end capturó la excepción pero al no ser ninguna de las previstas sólo mostró el mensaje. La instrucción raise volverá a lanzar la excepción de manera que podrás saber de qué excepción se trata y actuar de acuerdo a ello.

// Saludos

VolaRe 20-03-2004 11:13:41

nada roman, sigo estando en las mismas, desupes de poner la orden 'raise' inmediatamente despues de como tu me comentas me sale otro mensaje que es
Código:

Connection Closed Gracefully
y en este punto volvemos a estar como al principio, que me salia este mensaje sin poner las excepciones,¿a que es debido este mensaje?¿porque me cierra la conexion sin lanzarme ningun error?.

Ademas estoy haciendo una aplicacion muy simple que es poner el idsmtp y el idmessage, rellenando los campos del idmessage desde el propio componoente, porque esto ya me esta poniendo mosca, porque ya me estoy cuestionando ¿y si es el componente que no funciona?(cuando digo que no funciona el componente me refiero al idsmtp), bueno espero que me respondais pronto, gracias por dedicar parte de vuestro tiempo a este problemilla

Julià T. 20-03-2004 15:06:18

mirate este hilo para ver si te sirve http://www.clubdelphi.com/foros/showthread.php?t=7709

VolaRe 20-03-2004 19:12:24

Julia T. gracias por el hilo, pero sigue sin resolverme na, ahi un usuario en ese hilo que dice que a el no le iva por las direcciones que ponia, uqe no eran validas, peor yo uso las mias propias para autoenviarme el mail.

Le he dejado tambien un mensaje haber si me puede resolver algo, haber si tengo suerte.

dgbgt 14-08-2004 02:36:03

Gracias
 
Muchas Gracis por sus comentarios. Es la primera vez que uso Indy para enviar correo y me funciono a la perfección.

Gracias a todos.:p

rruffino 03-07-2005 18:31:35

Yo si lo probe y tengo problemas
 
Hola amigos del foro, he seguido estos pasos y les digo que anda a la perfeccion, pero noto un problema cuando envio archivos adjuntos. Uso delphi 7 e interbase. Mi sistema es un sistema de facturacion que al generar una factura la paso a formato pdf y se la envio al cliente por correo electronico. El problema es que a medida que voy enviando los correos me va adjuntando las facturas de los demas, es decir, si el primer cliente que facturo se llama Jose, y el numero de factura es el 100, José recibe en su correo la factura número 100, pero si luego esta el cliente Pablo con la factura numero 101, pablo no solo recibe su correspondiente factura sino que recibe las que fueron enviadas antes, en este caso la que fue enviada a José. Es como si quedaran cargados los archivos adjuntados previamente. Desde ya les agradezco su ayuda y espero que se me solucione este embrollo.
Saludos a todos, Román;)

roman 03-07-2005 18:45:52

Si usas el mismo IdMessage para los sucesivos correos es lógico que así suceda; supongo que de alguna manera tienes que borrar los datos anteriores. Cuando creas al "attachment" con

TidAttachment.Create(idMensage.MessageParts,ARCHIVOADJUNTO);

imagino que se agrega a idMessageParts así que posiblemente

idMessageParts.Clear

sea suficiente pero no lo he probado.

// Saludos

rruffino 04-07-2005 00:05:25

Eureka
 
Tocayo (yo tambien soy Román), has dado en la tecla, lo he probado y hasta ahora anda de maravillas. Gracias por tu tiempo.
Saludos, Román.-:)

elguille 09-12-2005 09:54:06

Resumo todo lo dicho con una funcion que funciona:p (comprobado)

añadir a USES

IdBaseComponent, IdComponent, IdTCPServer, IdSMTPServer,
IdMessage, IdEMailAddress, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP,idexception

Código Delphi [-]
  procedure email2(host:string;nombre:string;password:string;port:integer;desde:string;
    hasta:string;asunto:string;cuerpo:string;adjunto:string);
  var
      IDSMTP1: TIDSMTP;  // Componente de envio de correo
      mensaje: TIdMessage;
  begin
  IDSMTP1:=TIDSMTP.Create(nil);
  IdSMTP1.AuthenticationType :=atLogin;
  IdSMTP1.UserNAME := nombre;
  IdSMTP1.Password := password;
  IdSMTP1.Host := host;
  IdSMTP1.Port := port;
  MENSAJE:=TIDMESSAGE.CREATE(nil);
  with Mensaje do
  begin
  Body.Add(CUERPO);
  From.Text := desde;
  Recipients.EMailAddresses := hasta;
  Subject := asunto;
  Priority := TIdMessagePriority(mpHighest);//prioridad del mensaje
  CCList.EMailAddresses := '';
  BccList.EMailAddresses := '';
  TIdAttachment.Create(Mensaje.MessageParts,adjunto);
  end; //configuracion server smtp
  with idsmtp1 do
  begin
   try
      Connect;
      try
        // Envio el mensaje.
        Send(Mensaje);
      finally
        Disconnect;
      end;
  //    MessageDlg('Enviado Correctamente', mtInformation, [mbOK], 0);
    except
       // Capturo algunas excepciones que pueden ocurrir
      ON E: EIdProtocolReplyError do begin
      MessageDlg('No se ha podido enviar el email.' + #13 +
            'Incorrecto el email o el usuario o la password.', mtError, [mbOK], 0);
      end;
      on E: EFOpenError do begin
      MessageDlg('No se ha podido enviar el email.' + #13 +
            'Fichero Adjunto desconocido o erróneo.', mtError, [mbOK], 0);
      end;
      on E: EIdSocketError do begin
      MessageDlg('No se ha podido enviar el email.'+ #13 +
            'Host desconocido o incorrecto.', mtError, [mbOK], 0);
      end
      else begin
      MessageDlg('Fallo en el envio de email', mtError, [mbOK], 0);
      end;
    end;
  end;
  ENd;

dec 09-12-2005 12:34:26

Hola,

elguille, no veo que liberes en la función que muestras los objetos "TIdSmtp" y "TIdMessage", y, sin embargo, en su creación no les das dueño: eres tú mismo, el dueño, por tanto, y el encargado de su liberación. En fin, es que me ha llamado la atención, nada más. ;)

seba_cipo 09-12-2005 15:15:32

elguille:

me tira un error asi
socket error #10051 network is unreacheable

por q es???


cuando llamo el procedi email2 en el parametro

nombre:= mi email
desde:= mi email ???


esta bien eso??
desde ya muchas gracias!

seba_cipo 09-12-2005 16:43:11

solucionado,, muchas gracias, el problema era con el host,,
anda joya el procedure de elguille
saludos!

source_code 08-11-2006 12:31:25

Joder, me muestra el adjunto con caracteres en el body, me pone un chorizo de datos.
Mirad os muestro el principio del e-mail que se recibe:

Código:

This is a multi-part message in MIME format --=_NextPart_2rfkindysadvnqw3nerasdf Content-Type: text/plain Content-Transfer-Encoding: 7bit
 
Hola te paso un documento
 
 
--=_NextPart_2rfkindysadvnqw3nerasdf Content-Type: application/octet-stream; name="documento.doc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="carta_concejalia.doc" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAA0AAAAAAAAAAA EAAA0gAAAAEAAAD+////AAAAAM4AAADPAAAA//////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////s pcEAcWAJBAAA+BK/AAAAAAAAEAAAAAAABgAAUA8AAA4AYmpianFQcVAAAAAAAAAAAAAAAAAAAAAA AAAKDBYANBgAABM6AQATOgEAUAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD

ya no se que hacer macho.

AzidRain 11-01-2007 22:17:07

Muchas gracias por el codigo...muy bueno yo estaba usando el otro componente de NetExpress y gracias a que mi proveedor ya no acepta sesiones SMTP externas tuve que cambiarlo a Indy (que no me gustaba mucho)....Quedo super bien y resolvi en menos de 2 horas el problema..

faustino36 24-08-2007 21:59:13

que tal compañeros, soy uevo en este foro y necesito ayuda para enviar mails utilizando los componentes Indy, cheque este codigo y es el que estoy probando, pero marca un error de que no encuentra el host, los parametros que le paso a la funcion son estos:

email2('www.hotmail.com','proy_siapro@hotmail.com','*****',25,'proy_siapro@hotmail.com','faustino36@ hotmail.com','Prueba','cuerpo del mail','');

y esta es la funcion:


procedure email2(host:string;nombre:string;password:string;port:integer;desde:string;
hasta:string;asunto:string;cuerpo:string;adjunto:string);
var
IDSMTP1: TIDSMTP; // Componente de envio de correo
mensaje: TIdMessage;
begin
IDSMTP1:=TIDSMTP.Create(nil);
IdSMTP1.AuthenticationType :=atLogin;
IdSMTP1.UserNAME := nombre;
IdSMTP1.Password := password;
IdSMTP1.Host := host;
IdSMTP1.Port := port;
MENSAJE:=TIDMESSAGE.CREATE(nil);
with Mensaje do
begin
Body.Add(CUERPO);
From.Text := desde;
Recipients.EMailAddresses := hasta;
Subject := asunto;
Priority := TIdMessagePriority(mpHighest);//prioridad del mensaje
CCList.EMailAddresses := '';
BccList.EMailAddresses := '';
TIdAttachment.Create(Mensaje.MessageParts,adjunto);
end; //configuracion server smtp
with idsmtp1 do
begin
try
Connect;
try
// Envio el mensaje.
Send(Mensaje);
finally
Disconnect;
end;
// MessageDlg('Enviado Correctamente', mtInformation, [mbOK], 0);
except
// Capturo algunas excepciones que pueden ocurrir
ON E: EIdProtocolReplyError do begin
MessageDlg('No se ha podido enviar el email.' + #13 +
'Incorrecto el email o el usuario o la password.', mtError, [mbOK], 0);
end;
on E: EFOpenError do begin
MessageDlg('No se ha podido enviar el email.' + #13 +
'Fichero Adjunto desconocido o erróneo.', mtError, [mbOK], 0);
end;
on E: EIdSocketError do begin
MessageDlg('No se ha podido enviar el email.'+ #13 +
'Host desconocido o incorrecto.', mtError, [mbOK], 0);
end
else begin
MessageDlg('Fallo en el envio de email', mtError, [mbOK], 0);
end;
end;
end;
END;

los valores que paso a la funcion son correctos?? o cual es el error???
se agradece su ayuda!!:)


La franja horaria es GMT +2. Ahora son las 05:19:20.

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