View Full Version : ارسال ایمیل فارسی ( به صورت HTML )
Mahmood_M
جمعه 26 بهمن 1386, 14:01 عصر
با سلام ...
من یک فایل HTML دارم که متنش فارسی هست ...
من این فایل رو به ایمیلی ارسال میکنم ، اما حروفش ناخوانا هستند ( یا به صورت علامت سئوال ) ؟
توجه کنید که فایل رو Attach نمی کنم بلکه فرمت ایمیل HTML هست ...
من از کامپوننت IDMessage و IDSMTP استفاده میکنم ، کدوم خاصیت از کامپوننت IDMessage رو باید تنظیم کنم تا این مشکل حل بشه ؟
خاصیت CharSet رو به UTf-8 تغییر دادم ، باز هم نشد ...
لطفا اگه تجربه این کار رو دارید راهنمایی کنید ...
با تشکر ...
vcldeveloper
جمعه 26 بهمن 1386, 16:59 عصر
احتمالا بخاطر این مسئله هست که متن در IdMessage بصورت string نگهداری میشه، نه WideString.
Mahmood_M
جمعه 26 بهمن 1386, 17:05 عصر
احتمالا بخاطر این مسئله هست که متن در IdMessage بصورت string نگهداری میشه، نه WideString.
ممنونم ...
راه حلی برای این مشکل سراغ ندارید ؟
...
vcldeveloper
جمعه 26 بهمن 1386, 23:49 عصر
باید از TIdEncoderMIME برای Encode کردن متن به base64 استفاده کنید. این کلاس یک رشته string به شما میده که حاوی متن نامه بصورت Encode شده هست. این رشته را باید به IdMessage بدید و Encoding را تنظیم کنید. در نهایت باید با IdSMTP پیام را ارسال کنید.
برنامه Mail Client کاربر باید بتونه این نامه و encoding اش را تشخیص بده و آن را Decode کنه و به کاربر درست نمایش بده.
کد شما چیزی شبیه به کد زیر میشه (فرصت نشد بعد از نوشتن تستش کنم):
uses
TntComCtrls, IdSMTP, IdMessage, IdCoderMIME;
procedure TForm1.SendMail;
var
Stream : TMemoryStream;
Encoder : TIdEncoderMIME;
EncodedText : string;
MailText : TIdText;
begin
Stream := TMemoryStream.Create;
Encoder := TIdEncoderMIME.Create(nil);
try
//Retrieve the message from a Unicode source
TntRichEdit1.Lines.SaveToStream(Stream);
//Encode the message
Stream.Position := 0;
EncodedText := Encoder.Encode(Stream);
finally
Encoder.Free;
Stream.Free;
end;
//Prepare the message
with IdMessage1 do
begin
IsEncoded := True;
ContentType := 'text/html';
ContentTransferEncoding := 'base64';
//Create a new message part
MailText := TIdText.Create(MessageParts);
MailText.ContentTransfer := 'base64';
MailText.ContentType := 'text/html';
MailText.Body.Text := EncodedText;
end;
//Sending the message
IdSMTP1.Host := 'smtp.myhost.com';
IdSMTP1.Username := 'user';
IdSMTP1.Password := 'pass';
{if needed, other properties are set here.
... }
IdSMTP1.Connect(30000);
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
end;
Cave_Man
جمعه 12 مهر 1387, 23:24 عصر
آقای کشاورز اگه با این روش میل رو ارسال کنیم و در مرورگر کاربر ایمیلش رو چک کنه آیا میتونه متون فارسی رو صحیح ببینه؟
vcldeveloper
شنبه 13 مهر 1387, 02:39 صبح
اگه با این روش میل رو ارسال کنیم و در مرورگر کاربر ایمیلش رو چک کنه آیا میتونه متون فارسی رو صحیح ببینه؟
نباید مشکل خاصی وجود داشته باشه، چون در این حالت هم باز یک Mail Client وجود داره، فقط سمت سرور هست و فقط رابط کاربری اش تحت وب هست.
Cave_Man
شنبه 13 مهر 1387, 23:58 عصر
یه ایراد هست میل خالی ارسال میشه با این کد
چرا mailText درون IdMessage1 گذاشتید؟
چرا body مربوط به IdMessage1 رو در کد دخیل نکردید؟
vcldeveloper
یک شنبه 14 مهر 1387, 01:05 صبح
چرا mailText درون IdMessage1 گذاشتید؟
چرا body مربوط به IdMessage1 رو در کد دخیل نکردید؟
برای اینکه متن این ایمیل یک متن ساده ASCII نیست. درباره MessageParts تحقیق کنید.
Cave_Man
یک شنبه 14 مهر 1387, 10:19 صبح
من هنوز سر در نمیارم چرا ایمیل ظاهرا خالی ارسال میشه چون وقتی یاهو رو چک میکنم ایمیل خالیه...
vcldeveloper
یک شنبه 14 مهر 1387, 10:25 صبح
من هنوز سر در نمیارم چرا ایمیل ظاهرا خالی ارسال میشه چون وقتی یاهو رو چک میکنم ایمیل خالیه...
احتمالا Message parts را درست تشخیص نمیده، شاید هم Encoding را. البته سورس بالا آزمایشی بود و من خودم تستش نکردم، ولی بهتر هست که با یک برنامه مطمئن مثل Outlook چک کنید و ببینید آیا متن را درست نمایش میده یا نه.
Cave_Man
یک شنبه 14 مهر 1387, 10:29 صبح
من با فایر فاکس ( مرورگر) ایمیل یاهوم رو چک میکنم
قبلا که ایمیل روبه صورت ASCII پینگلیش میفرستادم درست بود الان میخام ایمیل رو فارسی ارسال کنم و با این کد با مشکل مواجه هستم. من ایمیلی ندارم که بتونم با OutLook چک کنم ایمیل هام مجانی هستن:خجالت: میخام حتی المکان بشه ایمیلهای فارسی رو در مرور گر هم چک کرد:متفکر:
vcldeveloper
یک شنبه 14 مهر 1387, 11:15 صبح
نباید ربطی به فایرفاکس داشته باشه.
من ایمیلی ندارم که بتونم با OutLook چک کنم ایمیل هام مجانی هستن
هر شرکتی که POP3 مجانی بده، کفایت میکنه، مثلا GMail. غیر از این هم خیلی شرکت های دیگه هستند که دسترسی POP3 مجانی میدن، می تونید یکی از آنها را برای آزمایش استفاده کنید. یاهو و Hotmail دسترسی مجانی POP3 نمیدن.
vcldeveloper
پنج شنبه 30 آبان 1387, 01:21 صبح
امروز توسط یک لینک در سایت دوباره به این تاپیک رسیدم، برای تکمیل بحث...
مشکل کارکترهای یونیکد فارسی در دلفی 2009 وجود نداره، پس اگر از این نسخه استفاده می کنید، می تونید از همون روش عادی ارسال ای میل استفاده کنید، و نیازی نیست که متن نامه را به Base64 کد کنید.
تجلی
جمعه 16 دی 1390, 19:46 عصر
امروز توسط یک لینک در سایت دوباره به این تاپیک رسیدم، برای تکمیل بحث...
مشکل کارکترهای یونیکد فارسی در دلفی 2009 وجود نداره، پس اگر از این نسخه استفاده می کنید، می تونید از همون روش عادی ارسال ای میل استفاده کنید، و نیازی نیست که متن نامه را به Base64 کد کنید.
سلام.
من در دلفی xe وقتی متن نامه ای رو به زبان فارسی ارسال میکنم به صورت علامت سوال در میاد کدی که استفاده میکنم اینه >
Idmessage.body.addstring(memo1.lines)
آیا نوع کد نویسی اشکال داره یا مشکل از جای دیگست ؟ چون عرض کرده بودید که از دلفی 2009 به بعد نیازی به کد کردن متن نامه نیست .
تجلی
جمعه 16 دی 1390, 22:37 عصر
با عر ض شرمندگی از اینکه تاپیک قدیمی رو بالا آوردم . من از دیروز درگیر این مشکل بودم راه حلش رو پیدا نمیکردم اما بالاخره مشکل حل شد .
برای کسانی که بعدا با این مشکل روبرو میشند پیشنهاد میکنم این لینک رو بخونند >
http://www.e-iter.net/Knowledge/Indy9/007544.html#0005
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.