Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Componente para enviar EMail (https://www.clubdelphi.com/foros/showthread.php?t=79964)

cancun 24-08-2012 07:36:25

Componente para enviar EMail
 
Hola compañeros


He leido varios hilos respecto al envio de correos, en los cuales se comparte distinto código para realizarlo, pero parece que ninguno funciona al 100% me refiero a que unos funcionan con unos servidores de correos y otros no (por ejemplo con hotmail, yahoo o gmail o por que requieren encriptación), yo sé muy poco del tema y al parecer también hay problema segun el servidor de correo que se usa, intenté usar las Indy 10 pero por ningun lado encontré como adjuntar un archivo (ni en la página de Indy o sus demos) el código que hay en todos lados es para Indy 9 y la sintaxis para adjuntar archivos es diferente.


Alguien ha usado algun componente ya sea gratuito o de paga que funcione en cualquier caso (hotmail, yahoo, terra, gmail, etc) o cuales son los requisitos mínimos para realizar esto (por ejemplo contar con un servidor de correo), alguno de ustedes actualmente tiene implementado esto??

Intenté usar el smtprelayserver (ya que uso Delphi 7) pero el demo que tiene nunca me funciono, al parecer hay que poner un DNS (aunque la documentacion indica que no es necesario generalmente) leí en este foro como obtener el DNS pero tampoco funciono ademas que nunca encontré donde adquirir el componente (parece que está descontinuado).

Buscando en la web he encontrado algunos componentes:

SendMail de appControls (ultima actualización en 2007)
Email engine for Delphi de Marshall software (no indica versiones de Delphi compatibles)
TEmailServer de CitiSoft

Alguien los utiliza? que tal les ha funcionado?


Saludos
Roger

Casimiro Notevi 24-08-2012 10:11:09

Creo que estás confundido.
¿Buscas un cliente o un servidor de correo?
Todos los clientes son válidos, el que funcione (o no funcione) con hotmail, gmail, etc. no es por el componente, sino por los parámetros que hay que darle.
Por supuesto que puedes usar indy, synapse, etc.
Al igual que puedes enviar mediante mapi, pop3, etc.
Cada uno trabaja de una forma, sólo es cuestión, como dije antes, de darle los parámetros oportunos.
Céntrate en uno que te guste más y documéntate con ese, no quieras abarcar todos en cuanto encuentres un problema, mejor solucionar ese problema/duda que empezar de cero con otros componentes.

cancun 24-08-2012 17:54:13

Hola Casimiro


Lo unico que requiero es enviar correos, tengo un programa de facturación instalado con varios clientes y lo que quieren es que al terminar la factura esta se envie automaticamente a sus clientes, como decía en mi mensaje anterior he leído varias soluciones propuestas, por ejemplo MAPI que si no entendí mal es una API que llama al cliente de correos instalado en la PC para que haga el envio (si estoy mal corregirme) el problema es que no todos los usuarios del sistema tienen instalado uno, mi idea es ver si alguien ha utilizado algun código o componente que le funcione para enviar correos a cualquier dirección y en cualquier PC (he leído que en algunos casos el código propuesto funciona en un PC y en otros hay que modificar el código para que funcione).


Espero exista algo que funcione de ese modo para no hacer ajustes en el programa o en el equipo de cada usuario.


Saludos
Roger

roman 24-08-2012 17:57:40

Cita:

Empezado por cancun (Mensaje 440596)
Espero exista algo que funcione de ese modo para no hacer ajustes en el programa o en el equipo de cada usuario.

A ver, esto que pides es prácticamente imposible. Piensa que tu plicación estría funcionando como un cliente de correo, así como, por ejemplo, el Thunderbird o el Outlook. Cualquier cliente de correo necesariamente debes especificarle los parámetros adecuados según el servidor de correo que tenga el usuario. Si a esos clientes de correo les tienes que indicar tales parámetros, ¿por qué esperas que a tu aplicación no?

// Saludos

cancun 24-08-2012 22:03:31

Hola



Creo que no me ha dado a entender, no me refería a no configurar nada, es obvio que por lo menos tengo que indicar la cuenta de correo que envia, tengo entendido que para enviar los correos es necesario configurar los valores para el servidor de correo que se usa, por ejemplo vamos a suponer que el usuario tiene una cuenta en el servidor de correos de la empresa (facturacion.empresa.com) lleva unos parametros o (facturacionempresa@hotmail.com) supongo lleva unos valores diferentes, pero la idea es que el codigo o componente funcione con ambos sin que haya que modificarlo solo configurarlo, de hecho tengo entendido que algunos componentes funcionan sin usar un servidor de correo (tal vez estoy mal o entendí mal) creo que envian el correo directamente al servidor de la cuenta destino o algo así.


Bueno si alguien me puede comentar que componente usa para enviar correo y que tal funciona (si le ha dado problema en algunos casos y si lo pudo arreglar) eso es lo que quisiera saber, gracias

Saludos desde el caribe

roman 24-08-2012 22:19:48

Pues sí, entiendo. Pero justamente, clientes como Thunderbird te permiten configurar servidores con SSL/TLS o STARTTLS que son los que usan, por ejemplo, gmail y hotmail respectivamente. Y es cuando, usando Indy, debes agegar los componentes adecuados.

Posiblemente puedas lograr algo más general si incluyes los componentes regulares de Indy junto con los de SSL y hacer las asignaciones pertinentes según lo que escoja el usuario.

// Saludos

Loviedo 25-08-2012 00:15:43

Creo que lo más facil es que todos los clientes utilicen el mismo servidor de correo.
Al cliente se le explica que la aplicación lleva implícita la configuración de un servidor de correo determinado. Hoy no hay problema para abrir cuentas de correo.
Saludos.

cancun 27-08-2012 06:08:10

Tal vez eso ayude, pero preguntaba quien había utilizado código o algun componente para enviar correos y le haya funcionado bien, pero creo que mejor empezaré a experimentar con lo que encuentre, muchas gracias a todos los que respondieron.

Loviedo 27-08-2012 23:15:12

He utilizado Delphi7, Indy9 y Yahoo y me funciona bien.
Saludos.

AzidRain 28-08-2012 02:02:22

Yo tengo algo funcionando que hace exactamente eso, utiliza Indy y hasta ahorita nunca ha dado problemas salvo con hotmail y cosas raras, pero mi cliente tiene su correo con su propio y no le ha dado lata.

Asi lo hago:
Código Delphi [-]
Procedure EnviarCFD(aEmail:string;aNo_talon:Integer; aSucursal:string;  asilent:boolean = false);overload;
// Componente de envio de correo
 var
   Correo    : TMailer;
   TextoMess : TStringList;
   Adjuntos  : TStringList;
   sFile     : string;

Begin
  Correo    := TMailer.Create;
  TextoMess := TStringList.Create;
  Adjuntos  := TStringList.Create;
  Screen.Cursor := crHourGlass;
  try
    Correo.CargaConfigSistemaDB; //Preparamos para enviar desde el correo del sistema
    sFile := uCFDTools.ExtractXMLFile(aNo_talon, aSucursal);
    Adjuntos.Add(sFile);
    ufqrTalonCFD.GeneraPDFTalonCFD(aNo_talon, aSucursal);
    sFile := uCFDTools.GetFullPDFFileName(aNo_talon, aSucursal);
    Adjuntos.Add(sFile);
    With TextoMess do
    begin
      Add('Estimado XXXXX:');
      Add('');
      Add('Anexo encontrará su comprobante Fiscal Digital');
      Add('');
      Add('Este es un correo generado de forma automática, por favor no lo responda');
      Add('Estamos a sus órdenes en el correo blalalala@aaa.com')
    end;
    Correo.FormatHMTLMessage(TextoMess);
    Correo.ConectaMail;
    Correo.EnviaEmailHTML(CFDMAIL_NOMBRECORREO,Correo.cuenta_origen,aEmail,CFDMAIL_ASUNTOCORREO,TextoMes  s,Adjuntos);
    Correo.DesconectaMail;
    If not asilent Then MessInfo('E-Mail enviado con éxito');
  finally
    Correo.Free;
    Adjuntos.Free;
    TExtoMess.Free;
    Screen.Cursor := crDefault;
   
  end;

end;

Obviamente tiene varias funciones propias, pero la que hace todo es esta:
Código Delphi [-]

Procedure TMailer.EnviaEmailHTML(nombre, desde, hasta, pasunto:String; ahtml,aTXT:TStringList;  adjunto: string);
var
  // Componente de envio de correo
   Mensaje : TIdMessage;
   txtPart : TIdText;
   htmPart : TIdtext;
   bmpPart : TIdAttachment;


Begin
  Mensaje:=TIDMessage.CREATE(nil);


Try
  with Mensaje do
  begin
    From.Address := desde;
    From.Name    := nombre;
    Recipients.EMailAddresses := hasta; //formamails.Emails.;}
    Subject                   := pasunto;
  //  Priority                  := TIdMessagePriority(mpHighest);//prioridad del mensaje
    CCList.EMailAddresses     := '';
    BccList.EMailAddresses    := '';


    ContentType := 'multipart/mixed';   //multipart/alternative
    //Creamos las 2 partes del e-mail, una en texto plano y la otra en html para

    {txtpart             := TIdText.Create( MessageParts,aTXT );
    txtpart.ContentType := 'text/plain';}
    htmpart             := TIdText.Create( MessageParts,ahtml );
    htmpart.ContentType := 'text/html';

    if Adjunto<>'' then
    Begin
        With TIdAttachmentFile.Create(Mensaje.MessageParts,adjunto) do

          //Utilizamos entonces la funcion Extract
          ContentType := GetMIMEType(adjunto);

    End;
  end; //configuracion server smtp

     MailHost.Send(Mensaje);

   finally
      Mensaje.free;
  end;


end;

{Esta función analiza la extensión del archivo pasado como parámetro y nos
devuelte un MIMETYpe adecuado para enviar por mail como adjunto si la extension
no es reconocida se manda como genérico.
}
function TMailer.GetMIMEType(afilename: string): String;
var Ext: string;
begin
  Ext := UpperCase(ExtractFileExt(afilename));

  if Ext='.PDF' then
   Result := 'application/pdf'
   else
     if Ext='.ZIP' then
       Result := 'application/zip'
     else
        if Ext='.MP3' then
         Result := 'audio/mpeg'
       else
       if (Ext='.JPG') OR (Ext='.JPEG') then
         Result := 'image/jpeg'
       else
         if (Ext='.XLS')  then
           Result := 'application/vnd.ms-excel'
         else
          if (Ext='.XLSX') then
            Result := 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
         else
           if (Ext='.DOC')  then
            Result := 'application/msword'
           else
           if (Ext='.DOCX')  then
            Result := 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
           else
            Result := 'application/octet-stream';


end;

Un poco chapucero el código pero funciona sin problemas, por eso ya no se le ha movido nada bajo la premisa de "si funciona no le muevas"...jejeje

cancun 28-08-2012 18:13:56

Hola


El código que usas es similar al que intenté usar con Indy 10 pero no me funciona, intenté usando una cuenta con prodigy pero siempre me da error al enviar, incluso lo intenté con un programa demo del componente SendMail de AppControls y nada, seguiré intentando.


Saludos

cancun 31-08-2012 22:40:22

Hola foristas


Por si le sirve a alguien les diré que terminé usando una dll de MarshallSoft que hasta ahora funciona perfectamente, he enviado correos Hotmail, GMail y Yahoo sin ningun problema y enviando archivos adjuntos, utilice Delphi 7.



Saludos

Casimiro Notevi 31-08-2012 23:02:10

1 Archivos Adjunto(s)
¿Y qué versión has comprado?

cancun 03-09-2012 18:59:00

Pues no menciona versión exactamente pero por el nombre parece que es la versión 4 (SEE4D) que incluye soporte hasta para Delphi XE2 de 64 bit y hasta ahora me funcionado bien con servidores con y sin autentificación.

cancun 03-09-2012 19:32:29

No me fijé antes en la imagen de tu mensaje, el software al que me refiero es este: SMTP/POP3/IMAP Email Engine y solo manejan un tipo de licencia al parecer.

Casimiro Notevi 03-09-2012 20:12:48

¿No sabes lo que has comprado ni la licencia que tiene ni versión? :confused:

AzidRain 03-09-2012 23:13:31

Pues parece que no la compró, más bien la consiguió de algún modo.

cancun 04-09-2012 06:30:45

Hola Casimiro, pues como comentaba antes, en ningun lado menciona la versión, en lo unico que me fijé es que hiciera lo que necesito y que funcione para Delphi 7.

Hola AzidRain, no entiendo el porque de tu comentario, pero te comento que si adquirí la licencia de uso en la página de MarshallSoft, primero baje la versión demo y después de comprobar que funciona perfectamente hice la compra (el demo tiene un nag screen).


Saludos

AzidRain 04-09-2012 22:47:34

Por eso puse "parece" porque no habias comentado nada. Ahora si ya queda muy claro. Disculpame si te sientes incómodo.

cancun 04-09-2012 23:44:36

No te preocupes, "conseguir" el software es costumbre de algunos y eso lleva al cierre de muchos fabricantes de buen software, en mi caso procuro evaluar primero que tal funciona para no "tirar" el dinero en software que no cumple lo que requiero, por eso preguntaba al principio por si alguien ya había usado librerias o código que le funcione bien, gracias a todos los compañeros por sus respuestas.


Saludos


La franja horaria es GMT +2. Ahora son las 10:42:47.

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