Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sobre envío de correo en Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=63861)

lduron 05-03-2009 20:35:07

Sobre envío de correo en Delphi 7
 
Hola amigos de Club Delphi!

Alguien puede ayudarme con este código:

Código Delphi [-]
 
unit EnviarCorreo;
interface
uses
  inifiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient,
  IdSMTP, ComCtrls, StdCtrls, Buttons, ExtCtrls, IdBaseComponent, IdMessage;
type
  TForm1 = class(TForm)
    pnlBottom: TPanel;
    Body: TMemo;
    ledAttachment: TLabeledEdit;
    btnAttachment: TBitBtn;
    ledSubject: TLabeledEdit;
    pnlTop: TPanel;
    ledHost: TLabeledEdit;
    ledFrom: TLabeledEdit;
    ledTo: TLabeledEdit;
    ledCC: TLabeledEdit;
    btnSendMail: TBitBtn;
    StatusMemo: TMemo;
    MailMessage: TIdMessage;
    SMTP: TIdSMTP;
    AttachmentDialog: TOpenDialog;
    procedure btnSendMailClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnAttachmentClick(Sender: TObject);
    procedure SMTPStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: String);
  private
    { Private declarations }
    procedure GetSettings;
    procedure SaveSettings;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.GetSettings;
var
  ini : TIniFile;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    ledHost.Text := ini.ReadString('SMTP','Host','');
    ledFrom.Text := ini.ReadString('MAIL','From','');
    ledTo.Text   := ini.ReadString('MAIL','To','');
    ledCC.Text   := ini.ReadString('MAIL','CC','');
  finally
    ini.Free;
  end;
end;
procedure TForm1.SaveSettings;
var
  ini : TIniFile;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    ini.WriteString('SMTP','Host',ledHost.Text);
    ini.WriteString('MAIL','From',ledFrom.Text);
    ini.WriteString('MAIL','To'  ,ledTo.Text);
    ini.WriteString('MAIL','CC'  ,ledCC.Text);
  finally
    ini.Free;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  GetSettings;
end;
procedure TForm1.btnSendMailClick(Sender: TObject);
begin
  StatusMemo.Clear;
  //setup SMTP
  SMTP.Host := ledHost.Text;
  SMTP.Port := 25;
  //setup mail message
  MailMessage.From.Address := ledFrom.Text;
  MailMessage.Recipients.EMailAddresses := ledTo.Text + ',' + ledCC.Text;
  MailMessage.Subject := ledSubject.Text;
  MailMessage.Body.Text := Body.Text;
  if FileExists(ledAttachment.Text) then
    TIdAttachment.Create(MailMessage.MessageParts, ledAttachment.Text);
  //send mail
  try
    try
      SMTP.Connect(1000);
      SMTP.Send(MailMessage);
    except on E:Exception do
      StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
    end;
  finally
    if SMTP.Connected then SMTP.Disconnect;
  end;
end;
procedure TForm1.btnAttachmentClick(Sender: TObject);
begin
  if AttachmentDialog.Execute then
    ledAttachment.Text := AttachmentDialog.FileName;
end;
procedure TForm1.SMTPStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
  StatusMemo.Lines.Insert(0,'Status: ' + AStatusText);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveSettings;
end;
end.

Al momento de ejecutarlo me manda el siguiente error:

Código:


Status: Disconnected.
Status: Disconnecting.
ERROR: 5.7.0 Must issue a STARTTLS command first. 5sm528965qwg.34
Status: Connected.
Status: Connecting to 74.125.93.111.
Status: Resolving hostname smtp.gmail.com.

Muchas gracias de antemano por su ayuda.

marcoszorrilla 05-03-2009 21:17:58

Veo que estás utilizando el puerto 25 como correo saliente, no es correcto para Gmail.
Cita:

  • Marca la casilla que aparece junto a El servidor requiere una conexión segura (SSL) en Servidor de correo saliente (SMTP).
  • Escribe 465 en el campo Correo saliente(SMTP):
  • Marca la casilla que aparece junto a El servidor requiere una conexión segura (SSL) en Servidor de correo saliente (SMTP).
  • Marca la casilla que aparece junto a El servidor requiere una conexión segura (SSL) en Servidor de correo entrante (POP3). El número de puerto cambia a 995.

Un Saludo

AzidRain 05-03-2009 22:05:35

marcos eso no le sirve porque es para configurar un cliente de correo, nuestro amigo lo esta haciendo directamente por código. De hecho, a mi me paso igual y para no liarme mucho mejor utilice una cuenta propia del servidor de mi cliente.

lduron 06-03-2009 16:10:02

Entonces chavos que es lo que me sugieren?

Por ejemplo: tengo una cuenta en gmail y quiero mandar el correo desde esta cuenta a otra de yahoo, hotmail, etc.

Muchas gracias.

P.D. Les pido de favor...si me pueden explicar más a detalle ya que soy usuario básico y el código lo obtuve de internet.

Caro 06-03-2009 16:30:24

Cita:

Empezado por marcoszorrilla (Mensaje 340343)
Veo que estás utilizando el puerto 25 como correo saliente, no es correcto para Gmail.

Un Saludo

Hola Marcos, yo también pense que no era correcto, funciona con el puerto 25 pero en el IdSMTP propiedad UseTLS debes escoger utUseExplicitTLS , pero si es con el puerto 465 o 586 se debe poner utUseImplicitTLS.

Cita:

Empezado por lduron (Mensaje 340418)
Entonces chavos que es lo que me sugieren?
Por ejemplo: tengo una cuenta en gmail y quiero mandar el correo desde esta cuenta a otra de yahoo, hotmail, etc.

Hola, yo te aconsejo que primero hagas funcionar el programa que te indico Roman en el otro hilo, tal cual esta, porque el problema es mas de configuración que del programa, empieza por ahí, dinos los errores que te da y te ayudamos. pregunta ¿tienes habilitado POP en tu cuenta de Gmail? ¿has instalado la biblioteca SSL?

Saluditos

marcoszorrilla 06-03-2009 17:10:38

Queda aclarado, gracias AzidRain y Caro.

Un Saludo.

lduron 08-03-2009 22:12:57

Me comentan: IdSMTP propiedad UseTLS debes escoger utUseExplicitTLS , pero si es con el puerto 465 o 586 se debe poner utUseImplicitTLS.
Pero en las propiedades del IdSMTP no viene el UseTLS!
Que puedo hacer?
Muchas Gracias!

lduron 08-03-2009 22:17:13

Perdón...se me olvidaba que cambie el puerto por 465 y ya no me marca ningún error,pero al momento de ejecutarlo se queda sin hacer nada solo me indica:
Status: Connected
Status: Connecting to
209.85.163.109
Status: Resolving hostname
smtp.gmail.com

dec 08-03-2009 22:41:36

Hola,

Igual te interesa este programa que, a modo de ejemplo, preparé hace tiempo. Sirve para eso, para enviar correos a través de Gmail.

lduron 09-03-2009 20:09:17

David

El hilo que pusiste no me lleva directamente al programa, te agradezco mucho si de ser posible me pones nuevamente un hilo en donde lo pueda bajar de una manera mas directa.

Perdón por las molestias que esto te ocasionen y nuevamente muchas gracias por tu gran ayuda.

Saludos.

dec 09-03-2009 20:16:05

Hola,

Nada, hombre, no es ninguna molestia. Ahora mismo mi sitio web está caído, pero, he subido el programa "SendGmail" (que incluye el código fuente) en el Directorio del ClubDelphi, concretamente, puedes descargarlo siguiendo este enlace. De todas formas, no deja de ser un ejemplo (si se puede decir así) más, puesto que encontrarás otros de la mano de Román, por ejemplo, buscando en los foros. ;)

lduron 09-03-2009 20:24:38

Muy bien David!

Lo voy a analizar y ejecutar, yo te comento que resultados obtuve.

Muchas gracias.

lduron 09-03-2009 20:39:21

Hola David!

Me manda varios errores al abrir el proyecto:
1) Error reading IdSMTP.SASLMechanisms.Property SASLMechanisms does not exist...
2) Error Class TIdSSLIOHandlerSocketOpenSSL not found...
3) Error reading IdMessage. FromList Property FromList does not exists...
4) Error reading IdMessage. ConvertPreamble Property ConvertPreamble does not exist...
5) Class TTrayIcon not found...
Y al ejecutarlo aún y con los errores, marca:
Field frmMain:IdSSLIOHandlerSocketOpenSSL does not have a corresponding component. Remove the declaration.

Me falta instalar alguna librería?
De ser así me puedes facilitar esas librerías?

Gracias!

Caro 09-03-2009 22:15:58

Cita:

Empezado por lduron (Mensaje 340590)
Me comentan: IdSMTP propiedad UseTLS debes escoger utUseExplicitTLS , pero si es con el puerto 465 o 586 se debe poner utUseImplicitTLS.
Pero en las propiedades del IdSMTP no viene el UseTLS!
Que puedo hacer?

Hola de nuevo, si no tienes esa propiedad es porque estas utilizando una versión antigua de las Indy.

Cita:

Empezado por lduron (Mensaje 340725)
Me manda varios errores al abrir el proyecto:
1) Error reading IdSMTP.SASLMechanisms.Property SASLMechanisms does not exist...
2) Error Class TIdSSLIOHandlerSocketOpenSSL not found...
3) Error reading IdMessage. FromList Property FromList does not exists...
4) Error reading IdMessage. ConvertPreamble Property ConvertPreamble does not exist...
5) Class TTrayIcon not found...
Y al ejecutarlo aún y con los errores, marca:
Field frmMain:IdSSLIOHandlerSocketOpenSSL does not have a corresponding component. Remove the declaration.

Me falta instalar alguna librería?
De ser así me puedes facilitar esas librerías?

Como lo dije, es porque tienes una versión antigua de las Indy, necesitas la versión 9 o 10 para que te funcione y puedes bajarte de aquí http://www.atozed.com/indy/Installer/Files.EN.aspx , pero no funcionan los enlaces para descargar. El amigo Lepe hace un tiempo ha subido al FTP del club la versión 10, prueba con esa http://www.clubdelphi.com/foros/show...69&postcount=2 .

Saluditos

lduron 11-03-2009 00:48:47

Hola Caro!

Instale los fuentes pero me marca un error: Undeclared Identifier TIdIPVersion.

Estoy utilizando Delphi 7

No tienes el ejecutable para esta versión?

Es que el que me pasaste es para la versión 6.

Muchas Gracias!

Saludos!

dec 11-03-2009 01:39:16

Hola,

Cita:

Empezado por lduron
Instale los fuentes pero me marca un error: Undeclared Identifier TIdIPVersion.

Prueba añadiendo la unidad "IdIpVersion", suele funcionar... (al menos con las últimas versiones de los componentes Indy). De no ser así, trata de buscar esa clase, intenta con algún buscador que sea capaz de localizar cadenas en archivos de texto, creo que el del mismo Delphi podría servirte. Una vez encuentres la unidad donde está esa clase, añádela.

lduron 11-03-2009 05:17:05

Este archivo (idIpVersion) no viene en las unidades del indy 10.0.52 y el archivo ejecutable que me hizo favor Caro de mandarme es para la versión 6 y yo estoy utilizando la versión 7 de Delphi.

Ya instale los fuentes, pero nada no funciona, me sigue marcando ese error.

Help me, please.

serpiente 11-04-2009 15:58:23

Que diferencias hay entre gmail y otros correo
 
Quisiera saber que diferencias hay, entre gmail, y otros correos como terra. Aclaro lo que quiero decir, aparte del puerto, que tendría que cambiar en la configuración para poder adaptarlos a otros correos. Estoy haciendo un programa que hace un backup y lo manda por correo, he tomado parte del código de David Esperalta, para enviar correo con gmail, pero quiero que tambien se pueda mandar con otros como terra, según escojas una u otra cuenta. NO se que hay que cambiar aparte del los propios relativos a al servidor, puerto, cuenta etc... para poder usar el mismo codigo.

Gracias de antemano a todos y en especial a David, por ser tan efectivo.

serpiente 15-04-2009 10:14:54

Me respondo a mi mismo, solo habia que cambiar el TLs de No a Si según sea

alejobog 09-10-2015 17:37:36

Cita:

Empezado por serpiente (Mensaje 344999)
Me respondo a mi mismo, solo habia que cambiar el TLs de No a Si según sea

Hola, tengo el mismo problema, como fue que arreglaste esto?, como cambiar TLs como dices!, gracias


La franja horaria es GMT +2. Ahora son las 12:30:59.

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