Ir al contenido



Foto

Como Enviar Email (Hotmail, Gmail, Yahoo)


  • Por favor identifícate para responder
22 respuestas en este tema

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 08:18

Muy buen lunes con todos amigos, me preguntaba si podrían ayudarme, intento encontrar la manera de como poder enviar un correo electronico sea a hotmail, Gmail ó Yahoo.

Gracias por su tiempo :)


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.212 mensajes
  • LocationRepública Dominicana

Escrito 23 mayo 2016 - 08:29

Con Synapse lo puedes hacer.

 

Saludos.


  • 0

#3 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 08:54

Gracias amigo enecuemene por su ayuda, acabo de instalar el componente synapse, ahora me estoy guiando del código del link:

delphi
  1. uses
  2.   ..., smtpsend,ssl_openssl; //probably other ssl units can be used, too.
  3.  
  4. // MailData is the text of the mail.
  5. function SendMail(
  6.   User, Password,
  7.   MailFrom, MailTo,
  8.   SMTPHost, SMTPPort: string;
  9.   MailData: string): Boolean;
  10. var
  11.   SMTP: TSMTPSend;
  12.   sl:TStringList;
  13. begin
  14.   Result:=False;
  15.   SMTP:=TSMTPSend.Create;
  16.   sl:=TStringList.Create;
  17.   try
  18.     sl.text:=Maildata;
  19.     SMTP.UserName:=User;
  20.     SMTP.Password:=Password;
  21.     SMTP.TargetHost:=SMTPHost;
  22.     SMTP.TargetPort:=SMTPPort;
  23.     SMTP.AutoTLS:=true;
  24.     if Trim(SMTPPort)<>'25' then
  25.       SMTP.FullSSL:=true; // if sending to port 25, don't use encryption
  26.     if SMTP.Login then
  27.     begin
  28.       result:=SMTP.MailFrom(MailFrom, Length(MailData)) and
  29.          SMTP.MailTo(MailTo) and
  30.          SMTP.MailData(sl);
  31.       SMTP.Logout;
  32.     end;
  33.   finally
  34.     SMTP.Free;
  35.     sl.Free;
  36.   end;
  37. end;

Al compilarlo me logra reconocer el "smtpsend" pero no reconoce el "ssl_openssl" sale este error:
 
unit1.pas(8,88) Fatal: no puedo encontrar ssl_opensslutilizado por Unit1del Inspector de Proyecto.
 
A que se puede deber....
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.212 mensajes
  • LocationRepública Dominicana

Escrito 23 mayo 2016 - 09:02

Instalar la librería OpenSSL tanto como en windows como en linux, Synapse depende de ella.
  • 0

#5 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 09:06

Gracias amigo enecumene, le comento que copie los archivos "ssl_openssl.pas" y "ssl_openssl_lib.pas" de la carpeta "C:\lazarus\components\synapse40\source\lib" a la carpeta de mi proyecto y ahora si corre el programa.

Voy a probar haber como me va y le comento. :) :)


  • 0

#6 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 11:49

Les comento mis avances, Primero instalar SYNAPSE luego agregar como “Nuevo Requerimento” LAZ_SYNAPSE a nuestro proyecto:
Luego dentro de nuestro soft usar este code: 

delphi
  1. Uses
  2. smtpsend, ssl_openssl;  // copiar los archivos "ssl_openssl.pas" y "ssl_openssl_lib.pas" de la carpeta "\synapse40\source\lib" a la carpeta de nuestro proyecto sino sale error “ssl_openssl”
  3.  
  4. // MailData is the text of the mail.
  5. function SendMail(
  6.   User, Password,
  7.   MailFrom, MailTo,
  8.   SMTPHost, SMTPPort: string;
  9.   MailData: string): Boolean;
  10. var
  11.   SMTP: TSMTPSend;
  12.   sl:TStringList;
  13. begin
  14.   Result:=False;
  15.   SMTP:=TSMTPSend.Create;
  16.   sl:=TStringList.Create;
  17.   try
  18.     sl.text:=Maildata;
  19.     SMTP.UserName:=User;
  20.     SMTP.Password:=Password;
  21.     SMTP.TargetHost:=SMTPHost;
  22.     SMTP.TargetPort:=SMTPPort;
  23.     SMTP.AutoTLS:=true;
  24.     if Trim(SMTPPort)<>'25' then
  25.       SMTP.FullSSL:=true; // if sending to port 25, don't use encryption
  26.     if SMTP.Login then
  27.     begin
  28.       result:=SMTP.MailFrom(MailFrom, Length(MailData)) and
  29.          SMTP.MailTo(MailTo) and
  30.          SMTP.MailData(sl);
  31.       SMTP.Logout;
  32.     end;
  33.   finally
  34.     SMTP.Free;
  35.     sl.Free;
  36.   end;
  37. end;

SU LLAMADA:
 

delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if SendMail('técnicopc@hotmail.com','CLAVEcorreotécnicopc','técnicopc@hotmail.com','cliente01@hotmail.com','smtp.live.com','25','hola soy synapse') then  // el puerto 465 no me funciona
  4.   ShowMessage('mensaje enviado correctamente')
  5.   else
  6.     ShowMessage('FALLA al enviar el correo');
  7. end;

Todo trabaja perfectamente, desde el mismo correo “técnicopc@hotmail.com” se logra enviar correos a otro Hotmail, Gmail ó Yahoo.

Solo hay dos puntos que encontre:

1. Tanto en Hotmail como en Yahoo el correo llega a la carpeta SPAM, pero en gmail llega a la misma bandeja.
2. El códido de arriba trabaja perfecto pero como puedo agregarle el asunto (subject) y también adjuntar un archivo pdf por ejemplo.

Agradezco cualquier sugerencia  :) :)
  • 0

#7 BDWONG

BDWONG

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 23 mayo 2016 - 01:20

Hola configuraste algo en tu correo ya que a mi no me deja enviar, con el puerto 25 directamente me da error y con el 465 se queda esperando un rato pero aun asi me marca como que no se puedo enviar.

Saludos....


  • 0

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 02:21

Hola amigo BDWONG, bueno la verdad estuve probando con varios codes pero retomando el primero del enlace que compartió el amigo enecumene me funciono bien, mis herramientas son las siguiente:

 

* Lazarus 1.6

* Synapse 4.0

* Windows 10x64

* Internet Movistar

 

De ahí nada más que recuerde.


  • 0

#9 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 23 mayo 2016 - 06:21

Se me olvidaba tambien tuve que poner en el mismo directorio del proyecto los archivos "libeay32.dll" y "ssleay32.dll" los cuales los conseguí de aquí:

https://github.com/silvioprog/xmailer

 

Están en la carpeta 3rdParty.

 

Alguien que me pueda ayudar agregandole un "asunto" al email :)


  • 0

#10 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 24 mayo 2016 - 05:42

Haciendo más pruebas del envio de correo me he dado cuenta que cuando envío el mensaje "Añadir acción" el mensaje llega así "Añadir Acción" SOLO cuando lo envío a hotmail, pues en gmail y yahoo todo sale bien.

 

Para poderlo solucionar solo deben aumentar la Uses "LConvEncoding" y el mensaje de envío debe quedar así "UTF8ToISO_8859_1('hola soy synapse')"

Modificando el código debe quedar así:


php
  1. Uses
  2. smtpsend, ssl_openssl, LconvEncoding; 
  3. // copiar los archivos "ssl_openssl.pas" y "ssl_openssl_lib.pas" de la carpeta "\synapse40\source\lib" a la carpeta de nuestro proyecto sino sale error “ssl_openssl”, LconvEncoding es para UTF8ToISO_8859_1
  4.  
  5. // MailData is the text of the mail.
  6. function SendMail(
  7.   User, Password,
  8.   MailFrom, MailTo,
  9.   SMTPHost, SMTPPort: string;
  10.   MailData: string): Boolean;
  11. var
  12.   SMTP: TSMTPSend;
  13.   sl:TStringList;
  14. begin
  15.   Result:=False;
  16.   SMTP:=TSMTPSend.Create;
  17.   sl:=TStringList.Create;
  18.   try
  19.     sl.text:=Maildata;
  20.     SMTP.UserName:=User;
  21.     SMTP.Password:=Password;
  22.     SMTP.TargetHost:=SMTPHost;
  23.     SMTP.TargetPort:=SMTPPort;
  24.     SMTP.AutoTLS:=true;
  25.     if Trim(SMTPPort)<>'25' then
  26.       SMTP.FullSSL:=true; // if sending to port 25, don't use encryption
  27.     if SMTP.Login then
  28.     begin
  29.       result:=SMTP.MailFrom(MailFrom, Length(MailData)) and
  30.          SMTP.MailTo(MailTo) and
  31.          SMTP.MailData(sl);
  32.       SMTP.Logout;
  33.     end;
  34.   finally
  35.     SMTP.Free;
  36.     sl.Free;
  37.   end;
  38.  
  39. // SU LLAMADA:
  40.  
  41. procedure TForm1.Button1Click(Sender: TObject);
  42. begin
  43. // el puerto 465 no me funciona así que uso el 25, usando UTF8ToISO_8859_1  para las Ñ y tildes en los mensajes.
  44.   if SendMail('técnicopc@hotmail.com','CLAVEcorreotécnicopc','técnicopc@hotmail.com','cliente01@hotmail.com','smtp.live.com','25',UTF8ToISO_8859_1('Añadir acción')) then 
  45.   ShowMessage('mensaje enviado correctamente')                    
  46.   else
  47.     ShowMessage('FALLA al enviar el correo');

De momento me esta funcionando perfectamente para Hotmail, GMail y Yahoo :) :) :)

pero me gustaría saber como agregarle asunto (Subject) a mis mensajes, alguna sugerencia...


  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.212 mensajes
  • LocationRepública Dominicana

Escrito 24 mayo 2016 - 06:01

Verifica si en Synapse existe una unidad llamada smtpsend, dentro de la misma existe una función donde puedes agregar un asunto, la función es ésta:

delphi
  1. function SendTo(const MailFrom, MailTo,
  2. Subject, SMTPHost: string;
  3. const MailData: TStrings): Boolean;


  • 0

#12 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 24 mayo 2016 - 07:23

Ayer me la pase probando "sendto" y "sendtoex" y nada amigo enecumene, no logro hacerlos funcionar :(


  • 0

#13 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 30 junio 2016 - 02:26

Buenas hermanos después de tanto sufrir pude encontrar una buena forma de poder enviar un email, les comparto los pasos:

 

Este es mi sistema:

* Win10x64
* Lazarus 1.6 32bits

1. descargar "xmailer-master.zip" desde: https://github.com/silvioprog/xmailer
2. luego instalan "xmailerpkg.lpk"
3. Copian las dlls (libeay32.dll and ssleay32.dll) desde "xmailer-master\3rdparty\openssl\win32" (o https://indy.fulgan.com/SSL/)hacia el directorio de su proyecto.
3. Ahora en lazarus Proyecto -> Inspector de Projecto -> Add -> nuevo requerimento -> nombre de paquete, y elijen Xmailerpkg.

4. En "Editor de código fuente", ponen:


php
  1. unit Unit1;
  2.      
  3.     {$mode objfpc}{$H+}
  4.      
  5.     interface
  6.      
  7.     uses
  8.       Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, XMailer;
  9.      
  10.     type
  11.      
  12.       { TForm1 }
  13.      
  14.       TForm1 = class(TForm)
  15.         Button1: TButton;
  16.         procedure Button1Click(Sender: TObject);
  17.       private
  18.         { private declarations }
  19.       public
  20.         { public declarations }
  21.       end;
  22.      
  23.     var
  24.       Form1: TForm1;
  25.      
  26.     implementation
  27.      
  28.     {$R *.lfm}
  29.      
  30.     { TForm1 }
  31.      
  32.     procedure TForm1.Button1Click(Sender: TObject);
  33.     var
  34.       Mail: TSendMail;
  35.     begin
  36.     Mail := TSendMail.Create;
  37.     try
  38.         // Mail
  39.         Mail.Sender := 'ericktux <ericktux@hotmail.com>';
  40.         Mail.Receivers.Add('client_01@hotmail.com');
  41.         Mail.Subject := 'Hello';
  42.         Mail.Message.Add('How are you');
  43.         mail.Attachments.Add('C:\saludos.log');  // for send files, optional
  44.         // SMTP
  45.         Mail.Smtp.UserName := 'ericktux@hotmail.com';
  46.         Mail.Smtp.Password := 'mypassword';
  47.         Mail.Smtp.Host := 'smtp.live.com'; // for hotmail
  48.         Mail.Smtp.Port := '587';
  49.         //Mail.Smtp.SSL := True;
  50.         mail.Smtp.FullSSL:=false;  // thanks rvk
  51.         Mail.Smtp.TLS := True;
  52.         Mail.Send;
  53.         ShowMessage('SUCCESS :) ');
  54.       finally
  55.         Mail.Free;
  56.       End;
  57.     end;
  58.     end.

Ese es el código básico y funcional, pero si desean enviar dos o tres correos a la vez junto con archivos adjuntos y también para saber si se pudo enviar el correo o no pueden guiarse de este código para modificarlo:


php
  1. program demo;
  2. {$mode objfpc}{$H+}
  3.  
  4. uses
  5.   XMailer, SysUtils;
  6.  
  7. var
  8.   Mail: TSendMail;
  9. begin
  10.   Mail := TSendMail.Create;
  11.   try
  12.     try
  13.       // Mail
  14.       Mail.Sender := 'Your Name <test@host.com>';
  15.       Mail.Receivers.Add('dest1@host.com');
  16.       Mail.Receivers.Add('dest2@host.com');
  17.       Mail.Subject := 'Your subject.';
  18.       Mail.Message.Add('Your message.');
  19.       // SMTP
  20.       Mail.Smtp.UserName := 'user@host.com';
  21.       Mail.Smtp.Password := 'abc123';
  22.       Mail.Smtp.Host := 'smtp.host.com';
  23.       Mail.Smtp.Port := '465';
  24.       Mail.Smtp.SSL := True;
  25.       Mail.Smtp.TLS := True;
  26.       Mail.Send;
  27.       Write('E-mail sent successfully!');     // ejemplo ShowMessage('Envío EXITOSO :) ');
  28.     except
  29.       on E: Exception do
  30.         Write(E.Message);     //  ejemplo ShowMessage(E.Message);
  31.     end;
  32.   finally
  33.     Mail.Free;
  34.   end;

Eso es todo, funciona con Hotmail, Gmail y Yahoo :)  también soporta Ñ y Tildes :D :D

 

NOTA: si al usarlo con gmail les sale un error es casi seguro que se deba a una protección que tiene google para algunas aplicaciones de envio de correo, pero como la nuestra es legítima lo pueden arreglar activando "Acceso de aplicaciones menos seguras".

 

Saludos con todos hermanos :) :) :) :)


  • 1

#14 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 30 junio 2016 - 02:33

Solo recuerden usar estos códigos así:


php
  1. //Mail.Smtp.SSL := True;
  2. Mail.Smtp.FullSSL:=false;  // thanks rvk
  3. Mail.Smtp.TLS := True;

Saludos :) :)


  • 1

#15 BDWONG

BDWONG

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 03 julio 2016 - 10:13

Hola solo para complementar  todo lo dicho por @monchito_elroro probe xmailer en linux en especifico ubuntu 16 lo unico  que necesite fue instalarme la libreria de desarrollo de openssl  bastaria con ejecutar en  la terminal el siguiente comando


php
  1. sudo apt-get install libssl-dev

Eso es todo Saludos...


  • 1

#16 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 04 julio 2016 - 01:16

Excelente aporte amigo BDWONG, gracias por compartir :) :)


  • 0

#17 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.944 mensajes
  • LocationArgentina

Escrito 04 julio 2016 - 01:44

Gracias a todos ustedes por compartir sus avances.

Yo tengo una duda, ¿funcionaría desde y hace cualquier correo? Se que comentaron que al menos las pruebas con Hotmail, Yahoo! y GMail fueron positivas. Más me pregunto si podría funcionar con otros clientes de correo, como por ejemplo los que ofrecen los ISP (Arnet, por ejemplo) o uno propio como los del tipo @TuEmpresa.com , etc.

 

Saludos,


  • 0

#18 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 247 mensajes

Escrito 04 julio 2016 - 01:52

Buena pregunta amigo Delphius, al menos por aquí Perú más utilizan Gmail, Hotmail y como último Yahoo, por lo tanto solo con ellos hize las pruebas, puede que funcione con los demás pero habría que probar, saludos. :)


  • 0

#19 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 771 mensajes
  • LocationArgentina

Escrito 04 julio 2016 - 05:17

Como manejan el tema de la privacidad de los datos del usuario? Yo el envio de mail prefiero delegarlo a aplicaciones externas (shell-> mailto:, outlook, etc) antes que pedirle datos privados al usuario (me refiero a correo y contraseña). No quiero tener ningun tipo de problemita, sobre todo ahora que las cuentas de correo en realidad son bastante mas "grandes", por ej con una cuenta de google accederias desde a los telefonos android del tipo, el correo, redes sociales, fotos, etc etc.

 

Osea yo no meteria la clave de mi correo en un programa de nadie; en el peor caso me creo un correo nuevo pero bueno

 

No se a veces me pongo muy paranoico jaja


Editado por Agustin Ortu, 04 julio 2016 - 05:17 .

  • 0

#20 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.944 mensajes
  • LocationArgentina

Escrito 04 julio 2016 - 05:46

Como manejan el tema de la privacidad de los datos del usuario? Yo el envio de mail prefiero delegarlo a aplicaciones externas (shell-> mailto:, outlook, etc) antes que pedirle datos privados al usuario (me refiero a correo y contraseña). No quiero tener ningun tipo de problemita, sobre todo ahora que las cuentas de correo en realidad son bastante mas "grandes", por ej con una cuenta de google accederias desde a los telefonos android del tipo, el correo, redes sociales, fotos, etc etc.

 

Osea yo no meteria la clave de mi correo en un programa de nadie; en el peor caso me creo un correo nuevo pero bueno

 

No se a veces me pongo muy paranoico jaja

 

Buen punto.

No eres paranoico, haces bien en señalar este tema. Muy cierto que con el e-mail y el password de Google por ejemplo puedes hacerte del sus contactos, teléfonos, aplicaciones que tiene instaladas, el historial, su agenda de calendario, etc.

 

Si uno actuara de mala fe lo que haría es guardar esa info y que se le reenviara. La otra posibilidad es justamente no almacenar en ningún lugar esa info y solicitarla cada vez que se va a emplear la funcionalidad en la aplicación. Entre ambas posturas están hay algunas alternativas: como almacenar la información cifrada, y que sólo el usuario conozca la clave. o aclarar en la licencia de uso del programa que a pesar de que se solicita estos datos bajo ningún momento se hará uso de mala fe, o la tan simple como la que tu dices: que el usuario cliente se cree una cuenta propia para trabajar con dicho sistema.

Nota que estas opciones no son necesariamente excluyentes.

 

Además, puede que el tipo de aplicación que están desarrollando monchito_elroro no sea para sus clientes sino algo personal y poder enviar mensajes desde su cuenta. O bien, que la administración de dichas cuentas sea a cuenta de la propia empresa. En algunos lugares se te asigna una cuenta de correo oficial asociada a una cuenta para tu trabajo, junto con una clave autogenerada.

O hasta imagino como escenario de que se trate de una cuenta adicional que como desarrollador creamos para que se destine a modo de reporte desde nuestros desarrollos. El cliente puede que no necesitase saber de esta cuenta. Simplemente el ve una una pantallita donde dice "enviar reporte" y el sistema por su cuenta desde el e-mail que hemos destinado nos llega el aviso de que algo ha pasado.

 

Como vez, hay situaciones en donde no necesariamente se estaría en riesgo la privacidad del cliente.

 

Saludos,


  • 0