Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mandar un email desde delphi (https://www.clubdelphi.com/foros/showthread.php?t=49429)

jorgegetafe 21-10-2007 16:50:34

Mandar un email desde delphi
 
Buenas, en mi aplicación necesito que cuando se pulse un botón se mande un email a una dirección de correo dada. ¿Como se haría?

Se podría mandar un adjunto sabiendo el archivo que se quiere mandar?

Muchas gracias por todo.

Lonidas 21-10-2007 17:32:32

mira este hilo http://www.clubdelphi.com/foros/show...ighlight=email

jorgegetafe 22-10-2007 19:01:45

Como no puedo seguir en la otra conversación porque está cerrada continuo aqui.

Con este código y tras añadir idemessage y idsmtp tengo varios problemas:



Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  mail : TIDMessage;
  smtp : TIdSMTP;
begin
  smtp := TIdSMTP.Create(self);
  // ASIGNO EVENTOS
  smtp.Name := 'Smtp';
  // CONFIGURACION DEL SERVIDOR AL QUE SE ENVIA EL CORREO
  with smtp do begin
    AuthenticationType := atLogin;
    Host := //Aqui colocas la direccion del servidor de correo saliente;
    port := 25;
    Username := //Aqui colocas la direccion de correo desde la que enviaras el correo;
    Password := //Clave de dicha cuenta;
  end;
  mail := TIdMessage.Create(Self);
  // CONFIGURACION DEL MENSAJE A ENVIAR
  with mail do begin
    From.Address := //aqu iva la direccion de correo desde la que vas a enviar
    Recipients.EMailAddresses := //aqu iva la direccion de correo hacia la que vas a enviar
    Subject := //Asunto del correo
    body.Text  := //Texto del correo
  end;
  //aDJUNTA EL ARCHIVO
  if FileExists(//El archivo que vas a enviar) then
      TIdAttachment.create(mail.MessageParts,//Ruta del archivo que vas a enviar);
  try
    // CONEXION CON EL SERVIDOR DE CORREO
    smtp.Connect(10000);
    try
      // ENVIO DEL MENSAJE
      smtp.Send(mail);
    except
      on E: Exception do
         ShowMessage('Fallo al enviar: ' + E.Message);
    end;
    ShowMessage('Mensaje enviado satisfactoriamente');
  finally
    if SMTP.Connected then SMTP.Disconnect;
    smtp.free;
    mail.free;
  end;






port := 25;
Aquí me da el siguiente error al compilar: Imcompatible types string and procedure, untyped pointer or untyped parameter.


luego en:
Host := //Aqui colocas la direccion del servidor de correo saliente;
El servidor de correo saliente es el hotmail (lo mando desde una cuenta hotmail) pero no se que direccion poner... www.hotmail.com no creo que sea verdad? No tengo ni idea, gracias.

eduarcol 22-10-2007 19:27:36

Ese codigo funciona solo en servidores POP, si buscas una cuenta yo te ayudo a configurar el codigo

jorgegetafe 22-10-2007 19:29:38

Cita:

Empezado por eduarcol (Mensaje 240330)
Ese codigo funciona solo en servidores POP, si buscas una cuenta yo te ayudo a configurar el codigo

Tengo una cuenta en gmail, creo que esa si que tiene POP gratuito no?

Si me pudieses ayudar con el código te lo agradecería enormemente.

eduarcol 22-10-2007 19:42:40

como dice GMAIL:

Cita:

Por favor, ten en cuenta que si tu cliente no admite la autenticación SMTP, no podrás enviar mensajes a través del cliente con tu dirección de Gmail.
pero podemos intentarlo, teniendo en cuenta estos parametros:

Cita:

El servidor de correo entrante (POP3) requiere SSL: pop.gmail.com
Usar SSL: Sí
Puerto: 995

El servidor de correo saliente (SMTP) requiere TLS: smtp.gmail.com Usar autenticación
Usar autenticación Sí
Usar STARTTLS: Sí (en algunos clientes se denomina SSL)
Puerto: 465 o 587

Nombre de cuenta: tu nombre de usuario de Gmail (incluido @gmail.com).
Dirección de correo electrónico: tu dirección de correo electrónico completa de Gmail (nombredeusuario@gmail.com)
Contraseña: tu contraseña de Gmail
lo que me pone a dudar es el aunto de la SSL pero ahi vamos

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  mail : TIDMessage;
  smtp : TIdSMTP;
begin
  smtp := TIdSMTP.Create(self);
  // ASIGNO EVENTOS
  smtp.Name := 'Smtp';
  // CONFIGURACION DEL SERVIDOR AL QUE SE ENVIA EL CORREO
  with smtp do begin
    AuthenticationType := atLogin;
    Host := 'smtp.gmail.com';
    port := 465;
    Username := //Aqui colocas la direccion de correo desde la que enviaras el correo;
    Password := //Clave de dicha cuenta;
  end;
  mail := TIdMessage.Create(Self);
  // CONFIGURACION DEL MENSAJE A ENVIAR
  with mail do begin
    From.Address := //aqu iva la direccion de correo desde la que vas a enviar
    Recipients.EMailAddresses := //aqu iva la direccion de correo hacia la que vas a enviar
    Subject := //Asunto del correo
    body.Text  := //Texto del correo
  end;
  //aDJUNTA EL ARCHIVO
  if FileExists(//El archivo que vas a enviar) then
      TIdAttachment.create(mail.MessageParts,//Ruta del archivo que vas a enviar);
  try
    // CONEXION CON EL SERVIDOR DE CORREO
    smtp.Connect(10000);
    try
      // ENVIO DEL MENSAJE
      smtp.Send(mail);
    except
      on E: Exception do
         ShowMessage('Fallo al enviar: ' + E.Message);
    end;
    ShowMessage('Mensaje enviado satisfactoriamente');
  finally
    if SMTP.Connected then SMTP.Disconnect;
    smtp.free;
    mail.free;
  end;
end;

lo unico que te queda es colocar la informacion que te corresponde, direcciones de correo y contraseñas

jorgegetafe 22-10-2007 19:46:17

Muchísimas gracias, voy a probar, luego te cuento ;-)

jorgegetafe 22-10-2007 19:55:28

He modificado el código tal y como me has puesto en los comentarios, me salen unos errores que ni por asomo se solucionar, te muestro la imagen que creo que asi me explico mejor:

http://img236.imageshack.us/img236/6713/dibujoan3.jpg

gracias.

eduarcol 22-10-2007 20:01:21

Por pura curiosidad:

¿Estas trabajando con archivos adjuntos?

En caso de ser negativa la respuesta,

¿Quitastes la referencia a codigo adjuntos?

jorgegetafe 22-10-2007 20:16:01

Gracias de nuevo, ya he arreglado el fallo, no cambie una cosa que era necesario.

Ejecuto el programa y ni me muestra mensajes, ni errores ni nada, se queda trabajando y nunca acaba... :-(

Te pongo exactamente el codigo con las direcciones de correo falsas:



Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;
type
  TForm1 = class(TForm)
    Button1: TButton;
    IdSMTP1: TIdSMTP;
    IdMessage1: TIdMessage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  mail : TIDMessage;
  smtp : TIdSMTP;
begin
  smtp := TIdSMTP.Create(self);
  // ASIGNO EVENTOS
  smtp.Name := 'Smtp';
  // CONFIGURACION DEL SERVIDOR AL QUE SE ENVIA EL CORREO
  with smtp do begin
    AuthenticationType := atLogin;
    Host := 'smtp.gmail.com';
    port := 465;
    Username := 'pepe@gmail.com';
    Password := 'contraseña';
  end;
  mail := TIdMessage.Create(Self);
  // CONFIGURACION DEL MENSAJE A ENVIAR
  with mail do begin
    From.Address := 'pepe@gmail.com';
    Recipients.EMailAddresses := 'pepe@gmail.com';
    Subject := 'Mensaje de prueba';
    body.Text  := 'Si estás leyendo esto es porque el mensaje ha llegado correctamente';
  end;
  //aDJUNTA EL ARCHIVO
  if FileExists('C:\Documents and Settings\Jorge\Escritorio\Mandar correo/hola.txt') then        // ruta del archivo a enviar
      TIdAttachment.create(mail.MessageParts,'C:\Documents and Settings\Jorge\Escritorio\Mandar correo/hola.txt');
  try
    // CONEXION CON EL SERVIDOR DE CORREO
    smtp.Connect(10000);
    try
      // ENVIO DEL MENSAJE
      smtp.Send(mail);
    except
      on E: Exception do
         ShowMessage('Fallo al enviar: ' + E.Message);
    end;
    ShowMessage('Mensaje enviado satisfactoriamente');
  finally
    if SMTP.Connected then SMTP.Disconnect;
    smtp.free;
    mail.free;
  end;
end;
end.




Gracias una vez más.

dec 22-10-2007 20:22:12

Hola,

Para trabajar con Gmail es preciso utilizar el protocolo "SSL" (Secure Socket Layer), necesitas algunas librerías para esto, y además usar componentes adicionales. Echa un vistazo al hilo Utilizar Gmail con SSL donde el compañero Román adjuntó un ejemplo práctico y funcional.

Otra cosa que llama la atención en tu código es:

Código Delphi [-]
  // ASIGNO EVENTOS
  smtp.Name := 'Smtp';

Puesto que lo que haces es, sencillamente, dar un nombre al objeto que instancias antes. No asignas ningún evento... y tal vez ni haga falta en este caso. :)

eduarcol 22-10-2007 20:46:03

Ese error fue mio, de copiar y pegar, quite el codigo pero no los comentarios :D:D

dec 22-10-2007 21:50:13

Hola,

Cita:

Empezado por eduarcol
Ese error fue mio, de copiar y pegar, quite el codigo pero no los comentarios :D :D

¡A la hoguera con él! :D :D

eduarcol 22-10-2007 21:54:50

Cita:

Empezado por dec (Mensaje 240362)
Hola,



¡A la hoguera con él! :D :D

pero con el jamon para que se cocine conmigo :D:D

dec 22-10-2007 21:59:23

Hola,

Aquí aplica lo de que las penas con pan son menos penas... ¡y con jamón no te digo! :D :D

jocey 22-10-2007 22:01:45

enviando correos desde delphi
 
Hola aqui te pongo el codigo para que le heches una ojeada

Código Delphi [-]
procedure TForm1.Button16Click(Sender: TObject);
const
  olMailItem = 0;
  olByValue = 1;
var
  OutlookApp, MailItem, MyAttachments: OLEVariant;
begin
  try
    OutlookApp := GetActiveOleObject('Outlook.Application');
  except
    OutlookApp := CreateOleObject('Outlook.Application');
  end;
  try
    MailItem := OutlookApp.CreateItem(olMailItem);
    MailItem.Recipients.Add('YourMailAddress@something.com');
    MailItem.Subject := 'Your Subject';
    MailItem.Body    := 'Your Message';
    myAttachments    := MailItem.Attachments;
    myAttachments.Add('C:\SomeFile.txt', olByValue, 1, 'Name of Attachment');
    MailItem.Send;
  finally
    myAttachments := VarNull;
    OutlookApp    := VarNull;
  end;
end;

Faust 06-12-2007 17:30:05

Perdón que reviva este hilo
 
Saludos camaradas:

Perdón que reviva este hilo.

Ya hace tiempo que utilizo este método para enviar correos de reportes que genero en Delphi, de esta manera el envío es automático, pues requiero que se envíen a ciertas personas cada cierto tiempo.

Mi duda es si mediante este método puedo pedir un acuse de recibo a los destinatarios, ya que me piden que los destinatarios confirmen que han recibido y leído el mensaje.

De una vez les agradezco la ayuda, mientras buscaré en google a ver que encuentro.


La franja horaria es GMT +2. Ahora son las 08:55:32.

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