# Native Code > برنامه نویسی در Delphi > کامپوننت های سایر شرکت ها، و توسعه کامپوننت >  ارسال ایمیل فارسی ( به صورت HTML )

## Mahmood_M

با سلام ...
من یک فایل HTML دارم که متنش فارسی هست ...
من این فایل رو به ایمیلی ارسال میکنم ، اما حروفش ناخوانا هستند ( یا به صورت علامت سئوال ) ؟
توجه کنید که فایل رو Attach نمی کنم بلکه فرمت ایمیل HTML هست ...
من از کامپوننت IDMessage و IDSMTP استفاده میکنم ، کدوم خاصیت از کامپوننت IDMessage رو باید تنظیم کنم تا این مشکل حل بشه ؟

خاصیت CharSet رو به UTf-8 تغییر دادم ، باز هم نشد ...

لطفا اگه تجربه این کار رو دارید راهنمایی کنید ...

با تشکر ...

----------


## vcldeveloper

احتمالا بخاطر این مسئله هست که متن در IdMessage بصورت string نگهداری میشه، نه WideString.

----------


## Mahmood_M

> احتمالا بخاطر این مسئله هست که متن در IdMessage بصورت string نگهداری میشه، نه WideString.


ممنونم ...
راه حلی برای این مشکل سراغ ندارید ؟

...

----------


## vcldeveloper

باید از 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

آقای کشاورز اگه با این روش میل رو ارسال کنیم و در مرورگر کاربر ایمیلش رو چک کنه آیا میتونه متون فارسی رو صحیح ببینه؟

----------


## vcldeveloper

> اگه با این روش میل رو ارسال کنیم و در مرورگر کاربر ایمیلش رو چک کنه آیا میتونه متون فارسی رو صحیح ببینه؟


نباید مشکل خاصی وجود داشته باشه، چون در این حالت هم باز یک Mail Client وجود داره، فقط سمت سرور هست و فقط رابط کاربری اش تحت وب هست.

----------


## Cave_Man

یه ایراد هست میل خالی ارسال میشه با این کد
چرا mailText درون IdMessage1 گذاشتید؟
چرا body مربوط به IdMessage1 رو در کد دخیل نکردید؟

----------


## vcldeveloper

> چرا mailText درون IdMessage1 گذاشتید؟
> چرا body مربوط به IdMessage1 رو در کد دخیل نکردید؟


برای اینکه متن این ایمیل یک متن ساده ASCII نیست. درباره MessageParts تحقیق کنید.

----------


## Cave_Man

من هنوز سر در نمیارم چرا ایمیل ظاهرا خالی ارسال میشه چون وقتی یاهو رو چک میکنم ایمیل خالیه...

----------


## vcldeveloper

> من هنوز سر در نمیارم چرا ایمیل ظاهرا خالی ارسال میشه چون وقتی یاهو رو چک میکنم ایمیل خالیه...


احتمالا Message parts را درست تشخیص نمیده، شاید هم Encoding را. البته سورس بالا آزمایشی بود و من خودم تستش نکردم، ولی بهتر هست که با یک برنامه مطمئن مثل Outlook چک کنید و ببینید آیا متن را درست نمایش میده یا نه.

----------


## Cave_Man

من با فایر فاکس ( مرورگر) ایمیل یاهوم رو چک میکنم
قبلا که ایمیل روبه صورت ASCII پینگلیش میفرستادم درست بود الان میخام ایمیل رو فارسی ارسال کنم و با این کد  با مشکل مواجه هستم. من ایمیلی ندارم که بتونم با OutLook چک کنم ایمیل هام مجانی هستن :خجالت:  میخام حتی المکان بشه ایمیلهای فارسی رو در مرور گر هم چک کرد :متفکر:

----------


## vcldeveloper

نباید ربطی به فایرفاکس داشته باشه.




> من ایمیلی ندارم که بتونم با OutLook چک کنم ایمیل هام مجانی هستن


هر شرکتی که POP3 مجانی بده، کفایت میکنه، مثلا GMail. غیر از این هم خیلی شرکت های دیگه هستند که دسترسی POP3 مجانی میدن، می تونید یکی از آنها را برای آزمایش استفاده کنید. یاهو و Hotmail دسترسی مجانی POP3 نمیدن.

----------


## vcldeveloper

امروز توسط یک لینک در سایت دوباره به این تاپیک رسیدم، برای تکمیل بحث...
مشکل کارکترهای یونیکد فارسی در دلفی 2009 وجود نداره، پس اگر از این نسخه استفاده می کنید، می تونید از همون روش عادی ارسال ای میل استفاده کنید، و نیازی نیست که متن نامه را به Base64 کد کنید.

----------


## تجلی

> امروز توسط یک لینک در سایت دوباره به این تاپیک رسیدم، برای تکمیل بحث...
> مشکل کارکترهای یونیکد فارسی در دلفی 2009 وجود نداره، پس اگر از این نسخه استفاده می کنید، می تونید از همون روش عادی ارسال ای میل استفاده کنید، و نیازی نیست که متن نامه را به Base64 کد کنید.


سلام. 
من در دلفی xe  وقتی متن نامه ای رو به زبان فارسی ارسال میکنم به صورت علامت سوال در میاد کدی که استفاده میکنم اینه > Idmessage.body.addstring(memo1.lines)

آیا نوع کد نویسی اشکال داره یا مشکل از جای دیگست ؟ چون عرض کرده بودید که از دلفی 2009 به بعد نیازی به کد کردن متن نامه نیست .

----------


## تجلی

با عر ض شرمندگی از اینکه تاپیک قدیمی رو بالا آوردم . من از دیروز درگیر این مشکل بودم راه حلش رو پیدا نمیکردم اما بالاخره مشکل حل شد . 

برای کسانی که بعدا با این مشکل روبرو میشند پیشنهاد میکنم این لینک رو بخونند > 
http://www.e-iter.net/Knowledge/Indy9/007544.html#0005

----------

