SPEED 3 NET

Web master tools - programmes - scripts - html code - code css
 
الرئيسيةSpeed Portalمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتدخولالتسجيل

شاطر | 
 

 ارسال بريد يحتوى على مرفقات فى الـ Php

اذهب الى الأسفل 
كاتب الموضوعرسالة
khdiwi
ELkInG 3s
ELkInG 3s


عدد المساهماتى : 1994
الجنس : ذكر

مُساهمةموضوع: ارسال بريد يحتوى على مرفقات فى الـ Php   الثلاثاء أغسطس 25, 2009 6:56 pm

بالدرس السابق رأينا

كيف نرسل بريد يحتوى على نسخة نصية ونسخة Html

ويمكنك ايضا بإستخدام ماتم شرحه فى الدرس السابق

ان تدخل صور ورابط تحميل ضمن الرسالة الموجودة بصيغة الـ html
كود:

<img src="http://path/to/image.gif />

كامثال
لكنها لن تكون مرفقة.

ولهذا بإذن الله سنتعلم فى هذا الدرس كيف نرسل بريد

يحتوى على ملفات مرفقة.


نبدأ بسم الله مع المثال جزء بجزء




كود PHP:

//اول شئ نحدد المتغيرات الأساسية
//عنوان البريد الذى سيتم الإرسال اليه
$to = 'email@example.com';

//عنوان البريد الذى سيتم الإرسال منه
$from = 'another_email@example.com';

//عنوان الرسالة

$subject = "Mail Contain Attachments";

//الهيدر الأساسى
$headers = "From: {$from}";

//المتغيير الذى سنفصل به بين نوع المحتوى

$sep = md5(date("r", time()));

//الهيدر الإضافى الذى سنخبر به معالج البريد ان هذه الرسالة تحتوى على اكثر من نوع داخل المحتوى
//ويتم ذلك بتحديد نوع المحتوى على انه
// multipart/alternative
//ثم نحدد حدود المحتوى بالفاصل الذى انشأناه
$headers .= "Content-Type: multipart/alternative; boundary=\"Php-Mixed-{$sep}\"";


اتمنى ان تكون التعليقات بالكود اعلاه وصلت المطلوب بشكل مقبول.

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

1. اول شئ لإرفاق الملف ان يكون الملف نفسه متوفر, سواء ملف من الخادم, او تم ارفاقه بواسطة فورم (مثلما تعلمنا فى دروس انشاء الفورم)
ثم نأتى بمحتواه بإستخدام الدالة file_get_contents
لأنها افضل دالة تخزن محتوى ملف داخل متغيير, ونحتاج لإدخال المعطى الأول بها وهو رابط او مسار الملف.
2. نظام البريد او برامج البريد (مثل الهوتميل والياهو وجيميل)
هى فى الأصل نظم تتعامل مع النصوص, وليس الملفات ولا اى شئ اخر.

بالتالى عندما نريد ارفاق ملف يجب ان نحوله الى مايسمى بـ base64
ويتم ذلك عن طريق دالة base64_encode

3. الحد المسموح به فى انظمة البريد للسطر الواحد هو 76 حرف.
بالتالى سنحتاج لتقسيم الملف بعد ان حولناه الى base64
ان نقسمه بحيث يكون كل سطر لا يتعدى الـ 76 حرف, ويتم ذلك عن طريق دالة chunk_split

اتمنى ان تكون الثلاث نقاط واضحة ونتابع بقية الكود.
كود PHP:

//المتغيير الذى سيحمل الملف
$attachment = file_get_contents('attachment.zip');

//نقوم بتحويل الملف الى base64
$attachment = base64_encode($attachment);

//نقوم بتقسيم الملف
$attached = chunk_split($attachment);


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

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

--Php-Alter-{$sep}

ثم الجزء المتفرع منه الذى سيحمل النسخة النصية
ونسخة الـ HTML
كود:

Content-Type: multipart/alternative; boundary="Php-Mixed-{$sep}"
ثم الجزء الفرعى منه للنسخة النصية
كود:

--Php-Mixed-{$sep}
Content-Type: text/plain

ثم الجزء الفرعى الأخر لنسخة الـ HTML
كود:

--Php-Mixed-{$sep}
Content-Type: text/html


ثم نقفل هذه الأجزاء بالشكل التالى
كود:

--Php-Mixed-{$sep}--

ثم نبدأ الجزء الخاص بالملف المرفق
كود:

--Php-Alter-{$sep}

ثم نضع به نوع المحتوى (نوع المحتوى يعرف بإسم Mime-Type ), واسم الملف كالتالى
كود:

Content-Type: application/zip; name="attachment.zip"


ثم نحدد بروتكول التعامل مع هذا المرفق وهو base64 ويتم الأمر بالشكل التالى
كود:

Content-Transfer-Encoding: base64


ثم نحدد كيف سيتم التعامل مع هذا الملف, وفى المثال هذا هو عبارة عن مرفق.
يتم الأمر بالشكل التالى
كود:

Content-Disposition: attachment


بعد ذلك نضع الملف المرفق, ونغلق الـ Php-Alter
بالشكل التالى
كود:

{$attached}
--PHP-Alter-{$sep}--

اتمنى نكون وضحنا كل شئ, وعندما نضع الكود بالكامل مع بعضه يكون بالشكل التالى
كود PHP:

<?php
//اول شئ نحدد المتغيرات الأساسية
//عنوان البريد الذى سيتم الإرسال اليه
$to = 'email@example.com';

//عنوان البريد الذى سيتم الإرسال منه
$from = 'another_email@example.com';

//عنوان الرسالة

$subject = "Mail Contain Attachments";

//الهيدر الأساسى
$headers = "From: {$from}";

//المتغيير الذى سنفصل به بين نوع المحتوى

$sep = md5(date("r", time()));


//الهيدر الإضافى الذى سنخبر به معالج البريد ان هذه الرسالة تحتوى على اكثر من نوع داخل المحتوى
//ويتم ذلك بتحديد نوع المحتوى على انه
// multipart/alternative
//ثم نحدد حدود المحتوى بالفاصل الذى انشأناه
$headers .= "Content-Type: multipart/alternative; boundary=\"Php-Mixed-{$sep}\"";


//المتغيير الذى سيحمل الملف
$attachment = file_get_contents('attachment.zip');

//نقوم بتحويل الملف الى base64
$attachment = base64_encode($attachment);

//نقوم بتقسيم الملف
$attached = chunk_split($attachment);

//نبدأ فى إعداد محتوى الرسالة
$message = <<< BODY
--Php-Alter-{$sep}
Content-Type: multipart/alternative; boundary="Php-Mixed-{$sep}"
--Php-Mixed-{$sep}
Content-Type: text/plain
our text version
of the message goes
here
--Php-Mixed-{$sep}
Content-Type: text/html
our <b>Html</b> version
of the <i>message</i> goes
<h5>here</h5>
--Php-Mixed-{$sep}--
--Php-Alter-{$sep}
Content-Type: application/zip; name="attachment.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
{$attached}
--Php-Alter-{$sep}--
BODY;

//نرسل الرسالة
mail($to, $subject, $message);
?>


اتمنى يكون كل شئ واضح بإذن الله.

وبالنسبة لأنواع المحتوى للملفات او مايسمى الـ Mime Type
اليكم روابط جيدة تفيدكم وبه معلومات جيدة ربما تحبوا ان تزودوا انفسكم بها.
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
en.wikipedia.org/wiki/MIME

مع كل تمنياتى بالتوفيق للجميع بإذن الله.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
ارسال بريد يحتوى على مرفقات فى الـ Php
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
SPEED 3 NET :: |l|l| Technology ParT|l|l| :: برامج و طرق عمل البرامج-
انتقل الى: