PDA

View Full Version : موضوع ایمیل به صورت کد نمایش داده میشود؟



mahdi939
دوشنبه 04 مرداد 1389, 17:22 عصر
با سلام من ایمیل را در برنامه با indy 10 و دلفی 7 میگیرم ولی موضوع آن ایمیلها به صورت کد زیر میشود آیا روشی برای دریافت صحیح موضوع ایمیل وجود دارد.
با تشکر

=?UTF-8?B?2KrYs9iqINmG2KfZhdmHINio2Kcg2b7ZitmI2LPYqg==?=

vcldeveloper
دوشنبه 04 مرداد 1389, 18:04 عصر
ایمیل رو چطور فرستادید؟ به نظر میاد با Base64 یا چیزی شبیه به اون این متن Encode شده باشه.

mahdi939
سه شنبه 05 مرداد 1389, 10:35 صبح
جناب آقای کشاورز این ایمیل از طریق اتوماسیون اداری تحت پروتکل ece تهیه میشود و شرکت سازنده ایمیل همکاران سیستم هست لذا من نمی دونم از چه کدی برای آن استفاده شده است اگه لازم دونستید ایمیل بدهید تا یکی شو براتون فروارد کنم.
با تشکر

mahdi939
سه شنبه 05 مرداد 1389, 11:54 صبح
من با base64 هم تست کردم درست جواب نمیدهد لازم به توضیح است در mailserver موضوع ها درست نمایش داده میشود ولی در برنامه که لیست ایمیلها قرار میگیرد موضوع ها در ست نمایش داده نمی شود و مثل کد بالا میشود

vcldeveloper
سه شنبه 05 مرداد 1389, 19:01 عصر
می تونید یک ایمیل دریافتی رو به شکل کامل اینجا قرار بدید؟ منظور از کامل این هست که کل header و body مربوطه رو به همون شکلی هست، اینجا بزارید، بدون تغییر.

khazaie01
سه شنبه 05 مرداد 1389, 22:09 عصر
سلام دوستان
همون Base64 باید باشه ، چند وقت پیش دنبال این موضوع بودم ( البته در حد 20 دقیقه ! ) ...
فکر کنم یک نمونه سورس کامل برای ارسال و دریافت با استفاده از این پروتکل داشتم...

khazaie01
سه شنبه 05 مرداد 1389, 22:26 عصر
من برنامه را نگاه نکردم ، یکی از دوستان از من پرسیده بود ولی خودش زودتر پیدا کرد ! به خاطر همین پیگیر این موضوع نشدم و این تنها فایلی هست که در رابطه با این موضوع دارم .
منبع را یادم نیست ، شاید داخل پوشه باشه !

داخل پوشه یونیت SZCodeBaseX بود ، پس از Base64 برای کدینگ استفاده شده.


دانلود نمونه سورس ( ارسال و دریافت )
(http://www.speedyshare.com/files/23549193/ECE.zip)

mahdi939
شنبه 09 مرداد 1389, 16:51 عصر
جناب آقای کشاورز محتویات ایمیل مورد نظر در فایل پیوست میباشد
باتشکر

vcldeveloper
یک شنبه 10 مرداد 1389, 17:51 عصر
جناب آقای کشاورز محتویات ایمیل مورد نظر در فایل پیوست میباشد متن Subject در داخل ایمیل به این صورت تعریف شده:


Subject: =?UTF-8?B?2K/YudmI2Kog2KjZhyDYrNmE2LPZhw==?=در این متن

?UTF-8?مقدار فوق نوع Encoding متن نهایی را مشخص میکنه.


B?و

==?=رو نمیدونم چی هستند، ولی جزو متن اصلی نیستند، چون کارکترهای ؟ و = در Base64 وجود ندارند. پس متن اصلی این هست:

2K/YudmI2Kog2KjZhyDYrNmE2LPZhwاین متن رو باید ابتدا با استفاده از Base64 دیکد کنید، و نتیجه حاصل را به UTF-8 تبدیل کنید. متن فارسی نهایی که تولید میشه "دعوت به جلسه" هست.

اگر فرض بگیریم که کارکترهای مربوط به نوع Encoding، و کارکترهای غیرمجاز در Base64 (مثل = یا ؟) را از رشته حذف کنید، می تونید با کد زیر، رشته رو از حالت کد شده خارج کنید کنید:


function DecodeSubject(const Subject: RawByteString): string;
var
InStream : TStringStream;
OutStream : TMemoryStream;
Utf8Str : UTF8String;
begin
InStream := nil;
OutStream := nil;
try
InStream := TStringStream.Create(Subject);
OutStream := TMemoryStream.Create;
SZDecodeBase64(InStream,OutStream);
OutStream.Position := 0;
SetLength(Utf8Str,OutStream.Size);
OutStream.Read(Utf8Str[1],OutStream.Size);
Result := UTF8ToString(Utf8Str);
finally
InStream.Free;
OutStream.Free;
end;
end;مثال:


ShowMessage(DecodeSubject('2K/YudmI2Kog2KjZhyDYrNmE2LPZhw'));البته در کد بالا من از SZCodebaseX که یک یونیت رایگان برای کار با Base64 هست، استفاده کردم، ولی شما بهتره درباره کار با کامپوننت IdDecoderMIME در Indy تحقیق کنید، و از اون استفاده کنید.

نکته مهم: من از دلفی 2010 استفاده کردم. در دلفی 7 شما RawByteString ندارید. به جای اون از همون نوع داده string دلفی 7 استفاده کنید. همچنین، مطمئن نیستم که UTF8ToString در دلفی 7 درست عمل میکنه یا نه.