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

عنوان الرسالة و إسم المرسل بحروف غير مفهومة

بدأه موظف في 24 فبراير 2011 · 9 رد · 3,368 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

عندي مشكلة في إرسال الإيميل أرجو مساعدتكم في حلها.

عندي سكربت لإرسال البريد و المشكلة أنه عند إرسال الإيميل لا تظهر الحروف العربية لعنوان الرسالة و إسم المرسل بشكل صحيح، بل تظهر حروف غريبة و غير مفهومة. المشكلة تحصل فقط في حال الإرسال إلى حسابات بريد ال Hotmail و ال Yahoo ، أما حسابات ال Gmail أو التي يتم فتحها من خلال ال Outlook فتصل الرسالة بشكل صحيح تماماً سواءً للعنوان أو لإسم المرسل.

الدالة التي أتوقع أنها مصدر المشكلة في السكربت هي التالية:

function MIME($from, $to, $subject='', $date='') {
		$this->clear();
		$this->addHeader('From', $from);
		$this->addHeader('To', $to);
		$this->addHeader('Subject', $subject);
		$this->addHeader('Date', ($date ? $date : date('r')));
		$this->addHeader('MIME-Version', '1.0');
	}

أبحث في الأمر منذ الأمس ولم أصل لشيء بعد يحل لي المشكلة، و جدت بعض الأكواد التي ظننت أنها ستحل المشكلة عندي لكن لم تنفع معي بعد أو ربما لم أعرف كيفية إستخدامها الصحيحة ضمن الكود الذي عندي، مثلاً وجدت:

$mail_subject ="=?windows-1256?B?".base64_encode('عنوان الرسالة')."?=\n";

حاولت تعديل هذا الكود ليعمل عندي ولم أنجح.

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

كيف يتم تعديل كود الدالة أعلاه لأرسل بحروف عربية بدون أي مشاكل .

شكراً للجميع ،،،

#2

السلام عليكم , جرب الطريقة ديه :-

function MIME($from,$to,$subject,$message){
	$headers  = "From: $from\r\n";
    $headers .= "Content-type: text\r\n";

    if(!mail($to, $subject, $message, $headers)){
		echo "ERROR : the message hasn't been send";
	}
}

وقم باستدعائها بهذا السطر :-

MIME('example@yourSite.com','example@yahoo.com','write your subject here','your message content goes here');
#3

شكراً لك أخي Kareem_3d على الرد.

لم أقم بعد بالتغيير الذي اقترحته علي لأني لم أعرف أين سيحصل الإستدعاء الجديد.

في السكربت الذي عندي هناك ملفين أساسين كما أعتقد حتى الآن أنهم المسؤولين عن مسألة إرسال الإيميل، الدالة التي كنت نقلتها في المشاركة الأساسية موجودة في ملف إسمه class.mime.php ، و هناك ملف آخر إسمه class.smtp.php . بل أظن أن هناك أكثر.

لكني الآن لاحظت شيء جديد، أولاً السكربت هو خاص بإرسال نشرات بريدية يشبه فكرة ال phplist ، له واجهة إستخدام و قاعدة بيانات. ما لاحظته أن هناك مشكلة في الترميز تمنع من إرسال عنوان الرسالة و إسم المرسل إلى قاعدة البيانات بحروف عربية صحيحة، إن تم حل هذا الأمر و أصبح بالإمكان بعد إدخال إسم المرسل و عنوان الرسالة من واجهة إستخدام السكربت ثم الذهاب إلى ال phpMyAdmin و مشاهدتها هناك بحروف عربية صحيحة عندها تكون المشكلة قد حلت كما أظن.

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

في إنتظار مساعدتكم ،،،

شكراً للجميع ،،،

post-623-072079100 1298548729_thumb.jpg

المرفقات
2.jpg
#4

استخدم هذا الكود قبل كل استعلام

mysql_query("set names 'utf8'");
#5

شكراً "najla" ..

نفعني الكود الذي نصحتني به كثيراً، إستخدمته و أصبحت قادراً على عرض الحروف العربية بشكل صحيح داخل قاعدة البيانات من خلال ال phpMyAdmin ، كانت مشكلة قديمة عندي أعلم بها و أتجاهلها كوني كنت أستطيع عرض المحتوى العربي على صفحات ال php لواجهة الموقع الأمامية بدون مشاكل، لكن الآن أعتبر الأمر في هذا الخصوص ( ثنائية قاعدة البيانات و الواجهة الأمامية ) أصبح مكتمل لدي و أكثر من رائع، فشكراً مرة أخرى.

لكن للأسف هذا الكود لم يحل لي بعد مشكلة الحروف العربية لإسم المرسل و عنوان الرسالة عند إرسال إيميل، ما زالت المشكلة قائمة لدي و ما زلت أرجو حلها.

كنت ظننت أن المشكلة ستحل في حال ضمان عرض الحروف العربية داخل قاعدة البيانات بشكل صحيح، لكن بعد إتمام هذا الأمر و استمرار المشكلة رغم ذلك أصبحت أكثر يقيناً أن مصدر المشكلة هو كود السكربت نفسه و الدوال المستخدمة فيه و المسؤولة عن إرسال الإيميل. أحب التذكير أن مشكلتي هي في سكربت عندي وظيفته إرسال نشرات بريدية لقوائم بريدية كبيرة العدد، راجعت ملفاته كثيراً، هناك أربعة ملفات رئيسية هي المسؤولة عن عملية إرسال الإيميل، أرفقت هذه الملفات الأربعة في هذه المشاركة أملاً في أن يجب أحد الإخوة هنا مصدر العلة.

الدالة الأساسية التي أعتقد أنها سبب المشكلة هي function MIME و الموجودة في الملف class.mime.php ، جربت التغيير فيها كثيراً و عادة التغيير فيها يظهر له تأثير على شكل ظهور إسم المرسل و عنوان الرسالة، أيضاً تغيير ال charset في أكثر من مكان في الملفات الأربعة المرفقة يظهر له تأثير، لكن للأسف لم أصل بعد للتوليفة ( إن صح التعبير ) الصحيحة بعد للكود الصحيح اللازم لهذه الدالة و إختيارات ال charset المناسبة لها في الملفات الأخرى التي تضمن لي ظهور إسم المرسل و عنوان الرسالة بحرورف عربية و إنجليزية صحيحة في جميع حسابات البريد المشهورة ( أوتلوك، هوتميل، ياهو، جيميل ).

أيضاً أستغرب لأمر، بحثت في عدة مواقع و تقريباً وجدت شبه إجماع أن كود مثل التالي كفيل بضمان عرض إسم المرسل و العنوان بالترميز المطلوب:

$sname="=?UTF-8?B?".base64_encode($sname)."?=\n";

$sname="=?windows-1256B?".base64_encode($sname)."?=\n";

لا يهم عندي كثيراً أيهما سيحل المشكلة ، هل هو الترميز utf-8 أو windows-1256 المهم أن يتم حل الأمر، و إن كنت أفضل الترميز utf-8 لما أسمع أنه هو المقياس العالمي الآن بهذا الخصوص.

هذا صورة لما يحصل معي عند إستخدام أي من الكودين أعلاه، أستغرب لماذا يتم طباعة الجزء =?UTF-8?B? أو =?windows-125?B? في حين أنني كنت أتوقع أن هذا الكود يمثل دالة تم إستدعاءها و عمل "تنفيذ" لها، و ليس string يتم طباعته !.

أيضاً أستغرب من شيء، عندي برنامج Kaspersky المضاد للفيروسات و يظهر لي رسالة عند وصول أي إيميل، في بعض التجارب التي أقوم فيها بالتغير في الملفات الأربعة المرفقة تظهر رسالة برنامج الكاسبر و فيها إسم المرسل و عنوان الرسالة بحروف عربية صحيحة بدون أي مشاكل، لكن عند مشاهدتها بالأوتلوك تظهر فيها مشكلة و حروف غير مفهومة، فكيف إستطاع على ذلك و لم يستطع الأوتلوك؟، مرفق صورة.

في إنتظار مساعدتكم.

شكراً للجميع ،،،

post-623-047760000 1298894294_thumb.jpg

post-623-023239800 1298894514_thumb.jpg

class.mime.php

class.mime_mail.php

class.smtp.php

tools.php

المرفقات
sender-name.jpgkasper.jpg

تم تعديل هذه المشاركة بواسطة موظف في 28 فبراير 2011 في 15:13

#6
$subject = 'Subject: =?utf-8?B?'.base64_encode($subject)."?=\r\n";
#7

ربما أنت لا تستخدم هذا في بداية برنامجك ؟

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ربما ينفع :)

#8

شكراً لك najla على التذكير على هذا السطر. الحقيقة تأكدت من إستخدامه سواءً في التجارب التي قمت بها لل utf-8 أو windows-1256 ولم يحصل معي أي تغيير، ما زالت المشكلة قائمة كما هي.

شكراً للجميع ،،،

#9

كثيرا ما تظهر لي نفس المشكلة في قاعدة البيانات

ولكن عندما اعرضها على المتصفح تظهر بصورة جيدة

تم تعديل هذه المشاركة بواسطة hanai في 6 مارس 2011 في 17:52

#10

السلام عليكم ورحمة الله

أخي الكريم

في بداية الموضوع ذكرت أن المشكلة لا تظهر مع برنامج الـ outlook و إنما تظهر فقط مع hotmail , yahoo فهل بدأت المشكلة تظهر على الـ outlook بعد تعديل قمت به أم ماذا؟

هل هناك أي مشكلة في نص الرسالة بالعربية أم أن المشكلة فقط بالعنوان و اسم المرسل؟ وهل يظهر في نص الرسالة الـ headers المرسلة أم فقط يظهر النص بدون أي كتابات أخرى؟

هل جربت الحل الذي طرحه الأخ herch ؟

ﻷن المشكلة قد تكون في الفاصل بين الأسطر مما يمنع تفسير الـ headers الخاص بالايميل و يحولها إلى نص

هل من الممكن أن تكتب لنا كود الاستدعاء الذي تستخدمه؟ ﻷن ذلك سيساعد في حصر المشكلة أكثر

بتوفيق الله...

Everything will be fine when we TALK LESS, DO MORE


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

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

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

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

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