PDA

Ver la Versión Completa : Problema Indy y Delphi


dbautista
18-11-2011, 01:55:47
Buenas noches compañeros, fijense que trato de enviar archivos adjuntos por medio de correo utilizando Indy 10.2.5 en Delphi 2009, y efectivamente se envia el correo pero el archivo adjunto no importa que extension, siempre es renombrado a ATT0003.dat o un numero aleatorio. Por favor alguien puede ayudarme?

newtron
18-11-2011, 09:54:38
Hola.

Deberías de poner el código que usas para decirte algo.

Saludos

Casimiro Notevi
18-11-2011, 11:02:57
Hola.
Deberías de poner el código que usas para decirte algo.
Saludos
Sí, estaría bien, lo mismo ayuda poder ver el código :)

dbautista
18-11-2011, 15:04:44
Muchas gracias por contestar amigos, este es el codigo que utilizo . . . de antemano les agradezco su tiempo y apoyo, estare al pendiente.

procedure TfrBandejaAutorizaPedidos.Button1Click(Sender: TObject);
var
MailMessage: TIdMessage;
SMTP: TIdSMTP;
begin
SMTP.Host := '192.168.0.150';
SMTP.Port := 25;
SMTP.Username := 'desarrollodti@liztex.com';
SMTP.Password := 'desarrolloit';

MailMessage.Recipients.add;
MailMessage.Recipients[0].Name:='Sistema de Produccion';
MailMessage.Recipients[0].Address:='dbautista@liztex.com';

MailMessage.From.Address :='dbautista@liztex.com';
MailMessage.From.Name :='Ordenes';
MailMessage.Recipients.EMailAddresses :='dbautista@liztex.com';

MailMessage.Subject :='Listado de Ordenes';
MailMessage.Body.Text :='Verificar Archivo Adjunto';

if FileExists('D:\Pruebas.txt') then
TIdAttachmentFile.Create(MailMessage.MessageParts, 'D:\Pruebas.txt');

try
try
SMTP.Connect;
SMTP.Send(MailMessage);
except on E:Exception do
ShowMessage(E.Message);
end;
finally
if SMTP.Connected then SMTP.Disconnect;
end;

end;


end;

casacham
20-11-2011, 21:00:13
El delphi 2009 tiene un error en el archivo
IdMessageClient.pas que no te permite mandar
archivos adjuntos por correo. Por suerte
un tio de Quality Central lo corrigio de la
siguiente manera
Buscas el dichoso archivo en la instalacion de
D2009 y haces lo siguiente. Sino aqui ya lo tenes
corregido por mi y deberas reemplazar los siguientes
archivos.
Buscas en C:\Program Files (x86)\CodeGear\RAD Studio\6.0
todas las coincidencias de IdMessageClient y reemplazas
los archivos originales porlos corregidos:
IdMessageClient.dcu
IdMessageClient.pas
Para obtener el archivo DCU, tenes que utilizar el PAS
en algun proyecto, entonces cuando lo compilas aparece
el archivo DCU.

Los instaladores del INDY se encuentran en indy.fulgan.com
es un ftp, asi que debes ponerlo tal cual
http://qc.embarcadero.com/wc/qcmain.aspx?d=66867
There are some missing/wrong line breaks within Indy\Protocol\IdMessageClient.pas. The problem has already been fixed in the Indy SVN.
Possible solutions are
1) Fix the IdMessageClient.pas on your own (see below)
2) Use the newest Indy source from the Indy SVN
To fix the bug on your own do the following:
- Open in the VCL source folder the file Indy\Protocol\IdMessageClient.pas
- Search for the procedure "procedure TIdMessageClient.SendBody(AMsg: TIdMessage);"
- Inside the procedure locate and change the lines with the informations given below
- Recompile the .pas and place the dcu (debug and release) in the appropriate directories
1) Insert below line 1214:
IOHandler.WriteLn(';');
2) Change in line 1219 (new line 1220):
IOHandler.WriteLn('Content-Disposition: ' + LAttachment.ContentDisposition); {do not localize}
to
IOHandler.Write('Content-Disposition: ' + LAttachment.ContentDisposition); {do not localize}
3) Insert below line 1220 (new line 1221):
IOHandler.WriteLn(';');
The fixed source part of IdMessageClient.pas looks afterwards like:
...
if LFileName <> '' then begin
IOHandler.WriteLn(';'); // inserted for QC 66867
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
IOHandler.Write(' filename="' + LFileName + '"'); {do not localize}
end;

casacham
20-11-2011, 21:12:12
Ese problema que comentas lo he resuelto siguiedo los pasos que se indican aqui (http://qc.embarcadero.com/wc/qcmain.aspx?d=66867)

El problema esta en el cambio de version. Espero que puedas solucionarlo.

Yo lo hice siguiendo paso por paso como se describe en la solucion y el asunto se arreglo. Luego me hice una copia de los archivos corregidos para una futura instalacion de D2009 ya tuviera resuelto el problema. Como ya me pase a DXE no tengo los archivos para pasartelos, pero como veras deje guardado en mi biblioteca la solucion.

dbautista
22-11-2011, 17:55:31
Buen dia casacham, de verdad te agradezco tu ayuda, hasta hoy me pude conectar y ver tu respuesta, voy a hacer lo que me indicaste y te aviso como me fue. Muchas gracias por preocuparte . . .

dbautista
24-11-2011, 21:10:50
Buen dia compañeros, les comento que con la solucion que me dio el amigo casacham, logre enviar archivos adjuntos. Muchas gracias por tu ayuda casacham, y doy por terminado este tema.

Casimiro Notevi
24-11-2011, 21:19:30
Vaya, veo que ninguno conocéis las etiquetas para presentar código legible. Ni siquiera casacham, con más de 160 mensajes :confused:

Un ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png