Etiquetas

2wire (1) actualidad (5) Amazon (1) android (3) APN iusacell (3) APN Movistar (3) APN telcel (4) APN unefon (3) Apple (2) Apple iTV (1) archivos temporales (1) arris (1) asesor de contenido (1) blackberry (1) cablemas (1) celular (1) Chrome (2) cmd (1) codigo de error (1) codigo de error kyocera (1) comandos MSDOS (4) comprimir outlook (1) core i7 (1) dephi (1) dephi7 (1) dhcp (1) direccion mac (1) DOE (1) EasyPHP en Windows (1) EPSON FX-890 (1) error (2) exportar carpetas de un PST a otro PST (1) exportar favoritos (2) exportar marcadores (2) facebook (1) firefox (3) fortinet (1) fuente de poder (1) galaxy (1) google chrome (1) Google Nexus 7 (1) grammata (1) grub (1) grub2 (1) grub4dos (1) hardware (1) importar favoritos (1) importar marcadores (1) impresoras en red y servicio de impresion (4) indy (1) indy10 (1) infinitum (1) instalacion servidor apache (1) internet 3G (1) internet explorer (3) ip (1) ipad (1) ipad mini (1) iphone (2) iphone 4 (1) iphone 5 (2) iusacell (1) Joomla (1) KENWORTH (2) Kindle Fire (1) kyocera KM 1815LA (1) lanzamiento (1) LCD (2) Mac (1) mac address (1) Macbook Air (1) manchas negras (1) manuales (1) microsoft (1) microsot (1) modem (1) modem cablemas (1) Monitores (2) movistar (1) mysql (1) nintendo wii (1) no arranca windows (1) no signal (1) oficce (2) OS (1) out of range (1) outlook (3) PACCAR (2) panel de administracion (1) pendrive (4) PHP (2) php5 (1) playstation 4 (1) procesadores (1) programacion dephi (1) Prospector (1) prueba de impresion (1) red wifi cablemas (1) Refrigeracion (1) reparar home de iphone (1) respaldar aplicaciones android (1) samsung (2) samsung galaxy (2) samsung galaxy s3 (1) samsung galaxy s3 mini (1) sector de arranque. xp. (1) seguridad (1) servidor Apache (3) Sistemas operativos (8) smartphone (1) SO (1) surface (1) tablet (5) telcel (1) telefonia (5) TELMEX (1) trucos windows (18) tutorial (1) ubee (1) Ultrabook (1) unefon (1) USB (6) usb booteable W7 (2) usuario y contraseña modem cablemas (1) Virus (1) virus de facebook (1) wifi (1) windows (2) windows 7 (6) windows vista (4) xbox (1) xbox 360 (1) xbox 720 (1) xp (1)

martes, 7 de mayo de 2013

enviar correos con archivo adjunto desde delphi 7 e indy10

este es un ejemplo de como enviar correos con archivos adjuntos desde delphi 7 utilizando indy 10, en la red hay varios ejemplos pero ninguno que funcionara bien en mi versión de indy pues en su mayoria son de la version 9 y trae algunas diferencias que les explicare.
la version estable y mas reciente la pueden encontrar en la pagina de indy: http://www.indyproject.org/index.en.aspx

el código completo se los paso tal cual, sin componentes de la paleta, todo se crea en tiempo de ejecucion, lo tengo en un form con 3 botones uno para cerrar, otro de about, y otro donde invoco la función y llamo le paso los parametros, cabe mencionar que lo tengo asi porque me servira para el desarrollo de una aplicacion mas grande.

la diferencia entre la version 9 y la 10 son unas declaraciones y correciones que se tienen que hacer para actualizar los codigos de las version anterior.

1.- tienes que declarar en el apartado uses IdAttachmentFile antes de declaralo en el apartado de variables de tu funcion de envio, estp es var Adjunto: TIdAttachmentFile;;
2.- ya en la funcion de envio cambia la propiedad de autentificacion de la version 9 a la 10 esto es SMTP.AuthenticationType := atLogin pasa a ser  SMTP.AuthType := atDefault
3.- en la parte de comprobacion  cambia la propiedad de creación del mensaje esto es
TIdAttachment.Create( Mensaje.MessageParts, sAdjunto ) pasa a ser en la version 10 que es la nuestra a
TIdAttachmentFile.Create( Mensaje.MessageParts, sAdjunto )

ya con estos cambios debe funcionar los códigos antiguos.

pantalla del ejemplo


finalmente el código:

en pantallas y abajo en texto para que lo copien.






codigo para copiarlo

unit estadoemail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdSMTP, IdMessage, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdAttachment;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses

IdAttachmentFile;   //declaracion

procedure EnviarMensaje( sUsuario, sClave, sHost, sAdjunto, sAsunto, sDestino, sMensaje: String );
var
   SMTP: TIdSMTP;
   Mensaje: TIdMessage;
   Adjunto: TIdAttachmentFile; //declaracion de la nueva variable

begin
  SMTP := TIdSMTP.Create( nil );
  SMTP.Username := sUsuario;
  SMTP.Password := sClave;
  SMTP.Host := sHost;
  SMTP.Port := 25;
  //SMTP.AuthenticationType := atLogin;--indy9
  SMTP.AuthType := atDefault;


  Mensaje := TIdMessage.Create( nil );
  Mensaje.Clear;
  Mensaje.From.Name := sDestino;
  Mensaje.From.Address := sDestino;
  Mensaje.Subject := sAsunto;
  Mensaje.Body.Text := sMensaje;
  Mensaje.Recipients.Add;
  Mensaje.Recipients.Items[0].Address := sDestino;

  if sAdjunto <> '' then
  begin
    if FileExists( sAdjunto ) then
     // Adjunto := TIdAttachment.Create( Mensaje.MessageParts, sAdjunto );  --indy9
      Adjunto := TIdAttachmentFile.Create( Mensaje.MessageParts, sAdjunto );
  end
  else
    Adjunto := nil;

  try
    SMTP.Connect;
  except
    raise Exception.Create( 'Error al conectar con el servidor.' );
  end;

  if SMTP.Connected then
  begin
    try
      SMTP.Send( Mensaje );
    except
      raise Exception.Create( 'Error al enviar el mensaje.' );
    end;

    try
      SMTP.Disconnect;
    except
      raise Exception.Create( 'Error al desconectar del servidor.' );
    end;
  end;

  if Adjunto <> nil then
    FreeAndNil( Adjunto );

  FreeAndNil( Mensaje );
  FreeAndNil( SMTP );

  Application.MessageBox( 'Mensaje enviado correctamente.',
    'Fin de proceso',MB_ICONINFORMATION );
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  EnviarMensaje( 'emisor@correo.com.mx', 'contraseña', 'smtp.correo.com.mx',
             'e:\documento.zip', 'Te envio mi documento',
             'receptor@correo.com.mx', 'Adjunto archivo: documento.zip' );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'ACERCA' + char(13)+ 'DEL AUTOR';
ShowMessage('DESIGN, MARGKETING AND SUPPORT'+ #13 + #13 + 'einvation@gmail.com');
end;

end.


espero les sea de utilidad.

2 comentarios:

  1. Ok, funciona igual que el de http://delphiallimite.blogspot.mx/2006/07/enviando-un-correo-con-indy.html
    delphi al limite, sol cambio las lineas de codigo que indicas.

    Tu eporte es bueno, pero menciona como poner los DLL para los que no sabemos como, actulizar de indy 9 a indy 10.

    Saludos.

    ResponderEliminar
  2. me genera un error must issue a starttls command first

    ResponderEliminar