ورود

View Full Version : سوال: نداشتن عنوان attachment



mahsara
شنبه 03 تیر 1391, 11:49 صبح
با سلام
من در برنامه ارسال ایمیل فایلی رو به صورت اتچ می فرستم و وقتی در اینباکس چکش میکنم نشونش میده اما عنوان و پسوند فایل نداره. یعنی عنوانش تبدیل میشه به Untitled و وقتی که دانلود میکنمش یک فایل بدون پسوند هست که باید با open with باز بشه!
سرچ کردم بعضیا گفتن مشکل از header ها هست و یا از contentType. نمیدونم همینطوره؟ کسی میتونه کمکی بکنه؟

var
html: TStrings;
htmpart, txtpart: TIdText;
bmppart: TIdAttachment;
filename: string;

begin
filename := ExtractFilePath(Application.ExeName) + 'test.txt';

html := TStringList.Create();
html.Add('<html>');
html.Add('<head>');
html.Add('</head>');
html.Add('<body><h1>Hello</h1>');
html.Add('This is For Test!</body>');
html.Add('</html>');

email.From.Text := edtFrom.text;
email.Recipients.EMailAddresses := edtTo.text;
email.Subject := 'Hello';

htmpart := TIdText.Create(email.MessageParts, html);
htmpart.Body.Text := html.Text;
htmpart.ContentType := 'text/html';

bmppart := TIdAttachmentFile.Create(email.MessageParts, filename);
bmppart.ContentType := 'image/jpeg';
// bmppart.ExtraHeaders.Values['content-id'] := 'test.txt';
bmppart.DisplayName := 'test.txt';
bmppart.FileName := 'test.txt';
// bmppart.ContentID := 'test.txt';

email.ContentType := 'multipart/mixed';

mahsara
دوشنبه 19 تیر 1391, 08:30 صبح
من بعد از مدتها تحقیق و جستجو متوجه شدم که برنامم هیچ مشکلی نداره و بلکه این مشکل به خاطر وجود یک باگ در دلفی 2009 هست!!!
راه حلش هم خیلی خیلی سادست و باید فایل IdMessageClient.pas را یک تغییرات کوچولو بدیم.
1- این فایلو از مسیر زیر باز کنید : (قبل از ویرایشش برای احتیاط ازش یک کپی بگیرین)
C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy\Indy10\Protocols\IdMessageC lient.pas

2-

01.procedure TIdMessageClient.SendBody(AMsg: TIdMessage):
02.begin
03....
04.if LFileName <> '' then begin
05.IOHandler.WriteLn(';'); // بین خط های 1214 و 1215 قرار دهید
06.IOHandler.Write(' name="' + LFileName + '"'); {do not localize}
07.end;
08.IOHandler.WriteLn;
09.IOHandler.WriteLn('Content-Transfer-Encoding: ' + LAttachment.ContentTransfer); {do not localize}
10.// دستور writeln را به write تغییر دهید
11.IOHandler.Write('Content-Disposition: ' + LAttachment.ContentDisposition); {do not localize}
12.if LFileName <> '' then begin
13.IOHandler.WriteLn(';'); // بین خط های 1220 و 1221 قرار دهید
14.IOHandler.Write(' filename="' + LFileName + '"'); {do not localize}
15.end;
16....
17.end;




3- اونوقت ایندی رو کلا re-build کنید

4- بعد فایل dcu رو از همون مسیر بالا در مسیرهای زیر هم قرار دهید :
C:\Program Files\CodeGear\RAD Studio\6.0\lib\Indy10\IdMessageClient.dcu
C:\Program Files\CodeGear\RAD Studio\6.0\lib\debug\Indy10\IdMessageClient.dcu

خب حالا برین لذت برنامه ای که نوشتید رو ببرید :چشمک: