Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Enviar correo delphi 2007 (https://www.clubdelphi.com/foros/showthread.php?t=88734)

oec2509 24-07-2015 01:02:32

Enviar correo delphi 2007
 
Cordial Saludo para todos

Tengo la siguente situacion para ver si es posible me puedan ayudar, desde hace algunos años utilizo delphi para enviar correos con componentes INDY, lo hice con alguno de los muchos ejemplos que encontre en este foro y hasta hace poco siempre me funciono de lo más bien, lo utilice tanto para correo externos a travez de internet como para correos en una red interna con Exchange server 2003 como decia funcionaba muy bien hasta hace poco que me empezó a enviar el siguiente error "Socket error #10060 timed out, Connection timed out" investige en google y me lei todas las respuestas que encontre a este respecto. Revise firewall, lo deactive, abri puertos, revise antivirus, lo cambie, lo desintale, lo volvi a instalar y de ninguna forma me funciono más, el escenario es el siguiente:

Servidor windows 2003 Server promovido con Active directory, Exchange Server 2003, Delphi 2007 motor de base de datos SQL2000 la version de INDY se las quedo debiendo porque no encontre cual es, pero si le puedo decir que es la que esta incluida en el delphi.

en la estación de trabajo utilizó Windows 7 Ultimate 64 bit con Avast de antivirus, estación debidamente incluida en el Dominio de trabajo.

El unico cambio que se dió fue que instale un nuevo router y cambie el IP de la puerta de enlace pero todo lo demás esta igual que antes.

Una de las aplicaciones en es utilizo el envio de correos es para enviar a los empleados los comprobantes de pago la rutina que utilizo es la siguiente:

Código Delphi [-]
procedure Tfm_comprobantes_pago.EnviarMensaje( sUsuario, sClave, sHost, sAdjunto, sAsunto, sDestino, sMensaje: String );
var SMTP: TIdSMTP;
   Mensaje: TIdMessage;
   Adjunto: TIdAttachmentfile;
   Adjunt1: TIdAttachmentfile;
   sAdjunt1 : String;

begin
  sAdjunt1 := 'P:\PROURSA\Cómputo\DBFS\mensaje.jpg';
  // Creamos el componente de conexión con el servidor
  SMTP := TIdSMTP.Create( nil );
  SMTP.Username := sUsuario;
  SMTP.Password := sClave;
  SMTP.Host := sHost;
  SMTP.Port := 25;
  SMTP.AuthType := atDefault;

  // Creamos el contenido del mensaje
  Mensaje := TIdMessage.Create( nil );
  Mensaje.Clear;
  Mensaje.From.Text := sUsuario ;
  Mensaje.ReplyTo.EMailAddresses := sDestino;
  Mensaje.ReceiptRecipient.Text :='';
  Mensaje.Subject := sAsunto;
  Mensaje.Body.Text := sMensaje;
  Mensaje.Recipients.Add;
  Mensaje.Recipients.Items[0].Address := sDestino;
  Mensaje.Priority := TIdMessagePriority(1);

  // Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
  if sAdjunto <> '' then
  begin
    if FileExists( sAdjunto ) then begin
      Adjunto := TIdAttachmentfile.Create( Mensaje.MessageParts, sAdjunto );
      Adjunto := TIdAttachmentfile.Create( Mensaje.MessageParts, sAdjunt1 );
    end;
  end
  else
    Adjunto := nil;

  // Conectamos con el servidor SMTP
  try
    SMTP.Connect;
  except
    raise Exception.Create( 'Error al conectar con el servidor.' );
  end;

  // Si ha conectado enviamos el mensaje y desconectamos
  if SMTP.Connected then

  begin
    try
      SMTP.Send( Mensaje );
    except
      raise Exception.Create( 'Error al enviar el mensaje.' );
    end;

    try
      SMTP.Disconnect;
    except
      raise Exception.Create( 'Error al desconectar del servidor.' );
    end;
  end;

  // Liberamos los objetos creados
  if Adjunto <> nil then
    FreeAndNil( Adjunto );

  FreeAndNil( Mensaje );
  FreeAndNil( SMTP );

end;

Trate de volver al estado anterior cambiando la puerta de enlace que fue lo unico distinto que hice pero nada hace que funcione, curiosamente leyendo en google, lei algo de abrir puertos en el firewall asi que abri el puerto 25 y para mi sorpresa funcionó; pero dos semanas despues dejo de funcionar. No se me ocurre que más probar, si alguno ha tenido alguna situación parecida y lo pudo resolver le agradecería su ayuda.

Muchas gracias por su atención.

dec 24-07-2015 12:21:09

Hola,

Tal vez no sea un problema relacionado con tu código o los componentes Indy sino que se trate del servidor SMTP. Ya sé que esto no es decir nada, pero, al menos tal vez sirva para no volvernos locos cambiando nuestro código, puesto que el problema puede no estar ahí. ¿Por qué no pruebas a establecer la propiedad "TimeOut" del componente "IdSMTP"?

Código Delphi [-]
SMTP := TIdSMTP.Create( nil );
SMTP.ReadTimeout := 30000;
// ...

Otra cosa que igual deberías hacer es actualizar los componentes Indy si no estás usando ya la última versión disponible.

oec2509 24-07-2015 16:25:21

Muchas gracias David por tu aporte, haré lo que me sugieres y te contaré el resultado.

Saludos
Orlando.

egostar 24-07-2015 16:52:07

Hola

También es probable que el puerto 25 esté bloqueado por tu ISP, algunos lo hacen por cuestiones de SPAM, intenta utilizando el puerto 587 (es el puerto alternativo para enviar correos) a ver si con ese si puedes enviarlos.

Saludos

oec2509 24-07-2015 19:36:52

Muchas gracias a David y a egostar por sus aportes pero en ninguno de los dos casos funciona el programa continua dando el mismo error, solo me falta probar reinstalar los componentes de INDY.

En el momento en que lo realice les contaré los resultados, gracias nuevamente por su interes y ayuda.

Saludos
Orlando.

oec2509 04-09-2015 01:21:30

Buenas tardes a todos

Despues de probar muchas alternativas y mucho buscar, siguiendo la sugerencia de egostar decidi buscar algo externo y en efecto el programa no tenía absolutamente nada mal, el problema fue totalmente externo.

Al cambiar el router, algo sucedio con la configuración de servidor de DNS, los correos que envío son internos con un servidor de Exchange, entonces lo que sucedía era que el Exchange estaba tratando de enviar los correo a un dominio externo en el cual no tenía acceso ni si quiera a validar la información, de ahi el error 10060. Lo que hice fue reconfigurar el servidor de DNS y listo.

Agradezco su interes y ayuda a los que contestaron.


La franja horaria es GMT +2. Ahora son las 04:01:38.

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