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.
Ok, funciona igual que el de http://delphiallimite.blogspot.mx/2006/07/enviando-un-correo-con-indy.html
ResponderEliminardelphi 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.
me genera un error must issue a starttls command first
ResponderEliminar