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.