Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Una función para enviar Email en XE10 (https://www.clubdelphi.com/foros/showthread.php?t=90128)

darkamerico 12-04-2016 00:24:40

Una función para enviar Email en XE10
 
Saludos amigos, he visto varias implementaciones antiguas de procedimientos para enviar Emails usando Indy, las he probado y no funcionan en XE10, quizás alguno de ustedes tiene una función que trabaje.

Saludos

Casimiro Notevi 12-04-2016 00:33:53

¿Cuales has probado y qué problemas has tenido?

Neftali [Germán.Estévez] 12-04-2016 16:23:00

¿Desde dónde o con qué cuenta quieres enviar el Mail?
¿Qué error te da?
¿En ejecución o en compilación?
...

darkamerico 12-04-2016 19:19:09

Hola
 
Cita:

Empezado por Casimiro Notevi (Mensaje 504310)
¿Cuales has probado y qué problemas has tenido?

He estado intentando hacer que funcione esta:

Código Delphi [-]
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP, IdMessage, IdAttachment, IdAttachmentFile, Vcl.StdCtrls,
  IdServerIOHandler, IdSSL, IdSSLOpenSSL, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack;

Código Delphi [-]
procedure SendEmail(const Recipients: string; const Subject: string; const Body: string);
var
  SMTP: TIdSMTP;
  Email: TIdMessage;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  SMTP := TIdSMTP.Create(nil);
  Email := TIdMessage.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  try
    //SSLHandler.MaxLineAction := maException;
    SSLHandler.SSLOptions.Method := sslvTLSv1;
    SSLHandler.SSLOptions.Mode := sslmUnassigned;
    SSLHandler.SSLOptions.VerifyMode := [];
    SSLHandler.SSLOptions.VerifyDepth := 0;

    SMTP.IOHandler := SSLHandler;
    SMTP.Host := 'smtp.gmail.com';
    SMTP.Port := 587;
    SMTP.Username := 'darkamerico7@gmail.com';
    SMTP.Password := '------'; //La clave del email
    SMTP.UseTLS := utUseExplicitTLS;

    Email.From.Address := 'darkamerico7@gmail.com';
    Email.Recipients.EmailAddresses := Recipients;
    Email.Subject := Subject;
    Email.Body.Text := Body;

    SMTP.Connect;
    SMTP.Send(Email);
    SMTP.Disconnect;

  finally
    SMTP.Free;
    Email.Free;
    SSLHandler.Free;
  end;
end;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SendEmail('darkamerico7@gmail.com','Hula','Ciao');
end;

Obtengo el siguiente error:



Saludos

darkamerico 12-04-2016 19:21:32

otro detalle
 
Cita:

Empezado por darkamerico (Mensaje 504324)
He estado intentando hacer que funcione esta:

Código Delphi [-]
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP, IdMessage, IdAttachment, IdAttachmentFile, Vcl.StdCtrls,
  IdServerIOHandler, IdSSL, IdSSLOpenSSL, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack;

Código Delphi [-]
procedure SendEmail(const Recipients: string; const Subject: string; const Body: string);
var
  SMTP: TIdSMTP;
  Email: TIdMessage;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  SMTP := TIdSMTP.Create(nil);
  Email := TIdMessage.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  try
    //SSLHandler.MaxLineAction := maException;
    SSLHandler.SSLOptions.Method := sslvTLSv1;
    SSLHandler.SSLOptions.Mode := sslmUnassigned;
    SSLHandler.SSLOptions.VerifyMode := [];
    SSLHandler.SSLOptions.VerifyDepth := 0;

    SMTP.IOHandler := SSLHandler;
    SMTP.Host := 'smtp.gmail.com';
    SMTP.Port := 587;
    SMTP.Username := 'darkamerico7@gmail.com';
    SMTP.Password := '------'; //La clave del email
    SMTP.UseTLS := utUseExplicitTLS;

    Email.From.Address := 'darkamerico7@gmail.com';
    Email.Recipients.EmailAddresses := Recipients;
    Email.Subject := Subject;
    Email.Body.Text := Body;

    SMTP.Connect;
    SMTP.Send(Email);
    SMTP.Disconnect;

  finally
    SMTP.Free;
    Email.Free;
    SSLHandler.Free;
  end;
end;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SendEmail('darkamerico7@gmail.com','Hula','Ciao');
end;

Obtengo el siguiente error:



Saludos

Tuve que copiar los archivos: libeay32.dll y ssleay32.dll en el directorio del proyecto.

darkamerico 12-04-2016 19:23:57

Hola Neftali
 
El error es en tiempo de ejecución luego de presionar el botón.

roman 12-04-2016 21:34:25

Bueno, a veces sirve leer los mensajes de error. Por ejemplo, éste dice:

en donde, al menos en mi caso, después de intentar alguna cosa, se da uno cuenta de que no es un problema tanto de programación sino de lo insoportable que se ha vuelto gmail:

Cita:

Se ha evitado un intento de inicio de sesión.


Hola, XXXX:
Alguien acaba de intentar iniciar sesión en tu cuenta de Google, xxxx@gmail.com, en una aplicación que no cumple los estándares de seguridad modernos.
LineComment Saludos

roman 12-04-2016 21:49:37

Ahora bien, desconozco como hacer que tu aplicación cumpla esos estándares de seguridad pero en tu cuenta de gmail está la opción "Permitir que las aplicaciones menos seguras accedan a tu cuenta" (indicada en la página en cuestión). Haciendo esto, se puede ya mandar el correo. Claro, está que eso no es lo que recomiendan.

LineComment Saludos

darkamerico 12-04-2016 22:45:28

Gracias roman
 
Cita:

Empezado por roman (Mensaje 504335)
Ahora bien, desconozco como hacer que tu aplicación cumpla esos estándares de seguridad pero en tu cuenta de gmail está la opción "Permitir que las aplicaciones menos seguras accedan a tu cuenta" (indicada en la página en cuestión). Haciendo esto, se puede ya mandar el correo. Claro, está que eso no es lo que recomiendan.

LineComment Saludos

En primer lugar, gracias por contestar amigo; referente al tema en cuestión, me deja aun mas preocupado luego de leer tus comentarios, será que con el tiempo nadie "No Debidamente Autenticado" podrá enviar emails a servidores como google, hotmail, etc..., en otras palabras, que opciones nos quedan, interactuar solamente con servidores privados?

Un Abrazo

Americo

darkamerico 12-04-2016 22:51:38

Funcionó!!
 
Bueno, leyendo el mensaje de error que me indicó roman, fui a la configuracion de mi cuenta de gmail y active la opcion de Recibir Correos de Dispositivos menos seguros y ... eureka, llegó el correo:



Saludos


La franja horaria es GMT +2. Ahora son las 07:49:03.

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