TIdAttachmentFile indy 2009 delphi Bug Soluttion

Solucion al bug de delphi 2009 en el componente TIdAttachmentFile de la libreria indy 9.

Cuando enviamos un correo con datos adjuntos , no se envia correctamente el nombre, por lo cual si queremos soluccionar este problema tenemos que hacer un upgrade de indy 9 a indy 10, pero para los que no quieren hacer todo ese gran cambio aqui esta la soluccion.

BUG http://qc.embarcadero.com/wc/qcmain.aspx?d=66867


1. copiar IdMessageClient.pas  ....source\Indy\Indy10\Protocols\IdMessageClient.pas al proyecto nuestro

2. editar
procedure TIdMessageClient.SendBody(AMsg: TIdMessage):
begin
...
//buscar estas lineas y cambiar por estas
  if LFileName <> '' then begin
    IOHandler.WriteLn(';'); // inserted for QC 66867, between original line 1214/1215
    IOHandler.Write('        name="' + LFileName + '"'); {do not localize}
  end;
  IOHandler.WriteLn;
  IOHandler.WriteLn('Content-Transfer-Encoding: ' + LAttachment.ContentTransfer); {do not localize}
  // next line fixed for QC 66867, changed IOHandler.WriteLn to IOHandler.Write
  IOHandler.Write('Content-Disposition: ' + LAttachment.ContentDisposition); {do not localize}
  if LFileName <> '' then begin
    IOHandler.WriteLn(';'); // inserted QC 66867, line 1220/1221
    IOHandler.Write('        filename="' + LFileName + '"'); {do not localize}
  end;
...
end;
3. compilar completamente
notas: seguramente debe copiar tambien el archivo IdCompilerDefines.inc
notas: debe verificar que se cree el archivo IdMessageClient.dcu
Delphi automaticamente lee las librerias de primero en el proyecto principal y si no estan desde delphi.




CODIGO EJEMPLO
SMTP CLIENT TO SEND EMAIL WITH ATTACHMENT FILES INDELPHI 2009 INDY 9 10
SMT CLIENTE PARA ENVIAR CORREOS CON ARCHIVOS DATOS ADJUNTOS EN DELPHI 2009 INDY 9 10

procedure TForm1.Button1Click(Sender: TObject);
//uses IdAttachment IdMessageParts idreplysmtp SysUtils IdSMTP IdEMailAddress IdAttachmentFile IdMessage ;
var
IdSMTP1 : TidSMTP;
IdMessage1: TIdMessage;
ItemDireccion : TIdEmailAddressItem;
Attachment: TIdAttachment;
begin
IdMessage1 := TIdMessage.Create(nil);
IdSMTP1 := TIdSMTP.Create(nil);
IdSMTP1.Host := '10.0.0.1';
IdSMTP1.Port := 25;
IdSMTP1.Password := '';
IdSMTP1.Username := '';

IdMessage1.From.Address := [email protected]';
IdMessage1.From.Name := 'test user';
IdMessage1.Subject := 'titulo';
IdMessage1.Body.Text := 'contenido normal';

IdMessage1.MessageParts.Clear;
Attachment := TIdAttachmentFile.Create(IdMessage1.MessageParts, 'C:\test.zip');
Attachment.FileName := 'C:\test.zip';
Attachment.DisplayName := 'test';

ItemDireccion := IdMessage1.Recipients.Add;
ItemDireccion.Address := [email protected]';
ItemDireccion.Name := 'james';

IdSMTP1.Connect();
try
try
idSMTP1.send(IdMessage1);
except on E: EIdSMTPReplyError do
begin
ShowMessage(E.Message);
end;
end;
finally
IdSMTP1.Disconnect;
Attachment.Free;
IdMessage1.Free;
IdSMTP1.Free;
end;
end;

0 pensamientos:

Post a Comment

feedback!