الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في الترميز عند ارسال بريد الكتروني

مغلق
بدأه aabughazaleh في 10 أبريل 2007 · 6 رد · 1,794 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بداية أود أن أعبر عن مدى سعادتي عن وجود هذا المنتدى، فبعد بحثي عن منتديات تهتم بلغة الدلفي بشكل جيد، وجدت ما كنت أصبو اليه.

لدي برنامج يقوم بارسال بريد الكتروني لأشخاص يتم تحديدهم من قاعدة بيانات أوراكل، المشكلة في عنوان الرسالة عندما يكون باللغة العربية يظهر لمستلم الرسالة برموز غير مفهومة، مع العلم أني قمت بحل المشكلة للـ Body وذلك بوضع

email.ContentType := 'text/html; charset=windows-1256';

بحثت في النت ووجدت

File
IdCoderHeader
Declaration
function EncodeHeader(
	const Header: string, 
	const specials: String, 
	const HeaderEncoding: Char, 
	TransferHeader: TTransfer, 
	MimeCharSet: string
): string;

حاولت فيه لكن لم أفلح، لأني لم أعرف ماذا أمرر للـ Function.

اذا هناك حل الرجاء مساعدتي.

وشكرا مقدما.

#2

للتوضيح سأدرج ال Code بالإضافة لصورة للبريد عندما يصل للمستلم.

IdSMTP := TIdSMTP.Create;
IdSMTP.Host := SMTPHost;

email := TIdMessage.Create;
email.CharSet := 'windows-1256';
email.ContentType := 'text/html; charset=windows-1256';
//email.ContentTransferEncoding  := '8bit';
//email.Encoding := meMIME;
//email.IsEncoded := True;

email.From.Text := FromEMail;
email.From.Name := 'من واحد عربي';//FromName;//<----المشكلة هنا
email.Recipients.EMailAddresses := ToEMail;
email.Subject := 'نص عربي';//Subject;//<----المشكلة هنا
email.Body.Text := Body;

والصورة عند الوصول للمستلم

Mail.jpg

أرجو المساعدة، وشكرا سلف.

#3

قرآت موضوعك اول ما طرحتة .. وحاولت مساعدتك .. لكن للأسف لم اجد حل واضح

الليلة ان شاء الله ... ابحث معاك على رواقة عن حل مناسب ... والزملاء هنا ان شاء الله ما يقصرون معاك

وللمعلومية .. مشكلتك يعاني منها الكثير من اللغات .. عربي .. كوري .. روسي .. الخ

#4
source code كتب:
قرآت موضوعك اول ما طرحتة .. وحاولت مساعدتك .. لكن للأسف لم اجد حل واضح

الليلة ان شاء الله ... ابحث معاك على رواقة عن حل مناسب ... والزملاء هنا ان شاء الله ما يقصرون معاك

وللمعلومية .. مشكلتك يعاني منها الكثير من اللغات .. عربي .. كوري .. روسي .. الخ

شكرا للرد، وأرجو أن نصل لحل هذا الموضوع :rolleyes: .

#5

السلام عليكم

لم استطع عمل تجارب بسبب عدم وجود SMTP لدي .. و الـــ EncodeHeader : function اعتقد تسطيع استخدامها بالطريقة التالية :

اضف الوحدة IdCoderHeader

وجرب :

var
  Tr: TTransfer;
  Cs: CSET;
begin
  Tr := bit8;
  IdMessage1.From.Name := EncodeHeader('From', Cs, 'Q', Tr, 'windows-1252');
  IdMessage1.Subject := EncodeHeader('Subject', Cs, 'Q', Tr, 'windows-1252');

باقي Cs ... لم اعرف بماذا اعرفها .. !

وجرب تلغي :

email.CharSet := 'windows-1256';
email.ContentType := 'text/html; charset=windows-1256';
//email.ContentTransferEncoding  := '8bit';
//email.Encoding := meMIME;
//email.IsEncoded := True;

و ان شاء الله تنتهي مشكلتك .

تم تعديل هذه المشاركة بواسطة source code في 19 أبريل 2007 في 07:15

#6

جاري التجربة يوم السبت ان شاء الله، فكما تعلم غدا الجمعة،

وشكرا لك أخ source code :).

#7

بعد التجربة والتعديل على EncodeHeader تمت حل مشكلة الترميز وشكرا للأخ :rolleyes: Source Code على المساعدة.

الحل:

procedure SendMail(FromName, FromEMail, ToName, ToEMail, Subject, Body: String);
var
  email: TIdMessage;
  IdSMTP: TIdSMTP;
  Tr: TTransfer;
begin
  Tr := bit8;
  IdSMTP := TIdSMTP.Create;
  IdSMTP.Host := SMTPHost;

  email := TIdMessage.Create;
  email.CharSet := 'windows-1256';
  email.ContentType := 'text/html; charset=windows-1256'; // مهم حتى يتم ظهور الأحرف العربية بشكل صحيح

  email.From.Text := FromEMail;
  email.From.Name := EncodeHeader(FromName, 'ض', 'Q', Tr, 'windows-1256'); // مهم حتى يتم ظهور الأحرف العربية بشكل صحيح
  email.Recipients.EMailAddresses := ToEMail;
  email.Subject := EncodeHeader(Subject, 'ض', 'Q', Tr, 'windows-1256'); // مهم حتى يتم ظهور الأحرف العربية بشكل صحيح
  email.Body.Text := Body;

  try
	idSMTP.Connect();
	try
	  idSMTP.Send(email);
	except
	  on E: Exception do ShowMessage(E.Message);
	end;
  finally
	if idSMTP.Connected then idSMTP.Disconnect();
	FreeAndNil(email);
	FreeAndNil(IdSMTP);
  end;
end;

وسيتم إرسال النص العربي بشكل صحيح.

شكرا مرة أخرى للتفاعل.

تم تعديل هذه المشاركة بواسطة aabughazaleh في 21 أبريل 2007 في 08:50

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…