(سلسلة في جعبتي ) -3-
كيف أرسل بريد مع مرفقات ؟
شكرا للجميع الذين ساهمو في توصيل فكرة إرسال بريد مع مرفقات .
وسوف اقوم أنا بدوري بشرحها لكم بالتفصيل كي تعم الفائدة على الجميع
وأنا لا تهمني الردود بقدر ما تهمني القرائات والفائدة التي يمكن أن تجنوها من خلال هذا المقال الصغير:
اولا ما هي المرفقات ولماذا نقوم بتشفير المرفقات :
في بداية عصر الإنترنت كان البريد فقط مخصص لإرسال النصوص ال TEXT
فقط لا غير
ودعوني أفاجئكم :
هو للأن لم تتواجد طريقة إرسال بريد عبر الملقمات المشهورة
POP3 و SMTP و ال IMAP
كي نستطيع ان نرسلة على هيئة ملف تنفيذي
وكان الحل على يد مطوري يونكس ...
وقد قيلت فكرة كانت القفزة النوعية في الثمانينات
هي تحويل الملفات الى صيغة نصية وهذا ممكن
عن طريق دالة معروفة منذ القدم وتدعى base64
وهذة الدالة لها شكلان:
الاول :
string base64_encode (string data)
هنا تقوم بتشفير اي String data تم إدخالة لها.
أي لو فرضنا أني كتبت كمثال :
beshoo like swalif
سوف يكون إظهار المقابل لها ضمن منصة base64
على نظام ال PHP التالي :
$x =base64_encode ("beshoo like swalif");
print "$x";
وسوف تكون النتيجة كالتالي :
YmVzaG9vIGxpa2Ugc3dhbGlm
وهي المقابل تماما للكلمة المذكورة أنفا
طيب
سوف ترى الأن كيف تم الإستفادة وبشكل فعال جدا من هذة الدالة
كي يمكن (برمجيا)
تحويل الكلمة الغير مفهمومة الى كلمة مفهومة سوف نستخدم الدالة العكسية
base64_decode (string encoded_data)
والتي سوف تكون صيغتها البرمجية كالتالي
الكلمة المشفرة هي :YmVzaG9vIGxpa2Ugc3dhbGlm
توضع الدالة مع الكلمة المشفرة لعكس التشفير :
$d="YmVzaG9vIGxpa2Ugc3dhbGlm"; ///تم وضعها كمتغير
$dec = base64_decode ($d);
print= "$dec";
هنا يمكننا وبصورة واضحة تماما عرض الكلمة
beshoo like swalif
طيب قد فهما كيف نقوم بتشفير وعكس التشفير
سوف نتعلم كيف نستفيد من هذة الخاصية كي نرسل بريد مع مرفقات:
بداية دعونا نتخيل سوية
دخلت الى الموقع
اه يجب ان اكتب إسمي وعنواني البريدي
قد نسيت
عندي هذة الصورة الصغيرة أرد أن أرسلها لصديقي ولا يتوفر عندي مكان أرفعها إلية ولا يوجد عندي حساب بريد اوت لوك )
اعلم انها فرضية صعبة ولكن دعونا نتخيل :
يجب علي أن أنشء ملف HTML وملف PHP يتناغم مع ملف ال HTML لكي يعزف رسالة مع مرفقات
دعوني أبدء بشرح ملف ال HTML :
بداية سوف نقوم بتعريف نموذج الإرسال (Form)
<form name="form1" method="post" action="smtp.php" ENCTYPE="multipart/form-data">
الشرح :
form name="form1
قيمة إفتراضية لإسم النموذج .
method="post"
ما هية نوع الإرسال وعادة تكون POST لأنها ترسل البيانات كحزمة أما GET فترسلها بهيئة عنوان واضح للعيان .
action="smtp.php"
هنا عنوان الملف الذي سوف نقوم بإرسال حزمة البيانات إلية وهو سوف يتولى معالجة كل شيء من البريد وما الى هنالك من امور أخرى.
ENCTYPE="multipart/form-data
هذا أهم جزء من الموضع كلة وهنا قبل ان اعلم ذلك واجهتني مشاكل عدة .
هنا أقوم بعمل تجزيء إن صح التعبير للبيانات المرسلة لملف Smtp.php كي يتم إستلام وتحليل و إرسال المعلومات من ملف ال PHP
يلزمني الأن بعض صناديق الادخال وهي تحمل الأسماء التالية:
كود PHP:
<table width="63%" border="1" cellspacing="1" cellpadding="0">
<tr>
<td>from </td>
<td>
<!-- هنا يتم كتابة عنوان المرسل -->
<input type="text" name="from">
</td>
</tr>
<tr>
<td>to</td>
<td>
<!-- وهنا يكتب عنوان المرسل إلية -->
<input type="text" name="to">
</td>
</tr>
<tr>
<td>subject</td>
<td>
<!-- ام هنا فيتم كتابة موضوع الرسالة-->
<input type="text" name="subject">
</td>
</tr>
<tr>
<td>Message</td>
<td>
<!-- ام هنا فيتم كتابة الرسالة-->
<textarea name="text"></textarea>
</td>
</tr>
<tr>
<td>what the file</td>
<td>
<input type="file" name="file" value="Submit">
</td>
</tr>
</table>
<br>
<input type="reset" name="Reset" value="Reset">
<input type="submit" name="Submit2" value="Submit">
<br>
<br>
</form>
وهنا قد إنتهينا من إشاء ملف ال HTML
والان ننشء ملف باسم smtp.php
كي نكتب به البرمجية التي سوف ترسل المرفقات و الرسالة في أن واحد
كود PHP:
<?
/* هنا نقوم بعملية إستلام لعملية الرسال التي قمنا بها من الصفحة السابقة وبالذات إستلام امر
تحميل الفايل
*/
$content = fread(fopen($file,"r"),filesize($file));
/*
هنا نقوم بعملية قراءة ما تم قرائتة في الخطوة السابقة وهو الملف
والقيام بعملية تشفيرة كي بتحول الى مستند نصي يمكننا من إرسالة ضمن الرسالة التي أصبحت من الان وصاعدا
عبارة عن رسالة متعددة الأجزاء
*/
$content = chunk_split(base64_encode($content));
/*
هنا نقوم بإنشاء الفاصل بين محتويات الرسالة
فكما قلنا هناك ملف وهناك نص الرسالة ويجب
أن يكون هذا افاصل فريد جدا من نوعه
ولا يجب ان يكون كل فاصل على حدى والا لن يعمل البريد
*/
$uid = strtoupper(md5(uniqid(time())));
/*
هنا نقوم بعملية سحب إسم الملف
*/
$name = basename($file);
/*
عملية سحب نوع الملف
*/
$type = filetype($file);
/*
هنا نقوم بتعريف رأس الرسالة وكما
نلاحظ قد وضعنا المتغير الذي يحوي عنوان
المرسل كي يستطيع مستلم الرسالة أن يرد على صاحب الرسالة
*/
$header = "From: $from\nReply-To: $from\n";
/*
هنا نقوم بتعريف أن هذة الرسالة تخضع لصيغة
الرسائل متعددة الأجزاء والصيغة العالمية هي
MIME
*/
$header .= "MIME-Version: 1.0\n";
/*
وهنا أيضا نقوم بتعريف ان الرسالة تحوي فاصل وهو ال
$uid
*/
$header .= "Content-Type: multipart/mixed; boundary=$uid\n";
/*
طبع الفاصل بين اجزاء الرسالة
*/
$header .= "--$uid\n";
/*
تعريف الرسالة أنها نصية
ويمكن تعديلها لتقبل ال
HTML
Content-Type: text/HTML
*/
$header .= "Content-Type: text/plain\n";
/*
تعريف قيمة التشفير النصي
*/
$header .= "Content-Transfer-Encoding: quoted-printable\n\n";
/*
هنا يتم طباعة ما تم كتابتة من الشخص المرسل
*/
$header .= "$text\n";
/*
طباعة فاصل
*/
$header .= "--$uid\n";
/*
هنا يتم طباعة إسم الملف المرفق ونوعه
*/
$header .= "Content-Type: $type;\n name=\"$name\"\n";
/*
هنا نقوم بتعريف ان الملف المرفق مشفر
ضمن مستوى تشفير نصي
base64
كي ييقوم خادم البريد بعكس العملية
فورا وهذا ما يفعلة الاوت لوك أو أي برنامج أخر
*/
$header .= "Content-Transfer-Encoding: base64\n";
/*
جزء هام جدا
هنا يتم تعريف ان الملف هو
attachment
*/
$header .= "Content-Disposition: attachment;\n filename=\"$name\"\n\n";
/*
هنا يتم طباعة الملف بعد تشفيرة
*/
$header .= "$content\n";
/*
طباعة الفاصل
*/
$header .= "--$uid--";
/*
هنا تتم أخيرا عملية الإرسال
*/
mail($to, $subject, "", $header);
/*
تأكيد عملية الإرسال
*/
print "<html>
<head>
<title>Message Sent to $to</title>
<meta http-equiv=Content-Type content=text/html; charset=>
</head>
<br><br><br>
<body bgcolor=#FFFFFF text=#000000>
<table width=85% border=1 cellspacing=1 cellpadding=0 align=center bordercolor=#333333>
<tr>
<td height=16 width=656 bgcolor=#999999></td>
</tr>
<tr>
<td height=27 valign=top>
<div align=center>The message was sent to <b><font color=#FF0000>$to</font></b></div>
</td>
</tr>
<tr>
<td height=17 bgcolor=#999999></td>
</tr>
</table>
</body>
</html>
";
?>
والجدير بالذكر هو عرض الرسالة كيف تبدو بعد وصولها
وهي سوف تكون تقريبا كالتالي :
>From smart@hotmail.com Sun Aug 4 08:40:22 2002
Received: from hotmail.com (f307.law10.hotmail.com [64.4.14.182])
by dns2.scs-net.org (8.11.4/8.11.4) with SMTP id g746eK930758
for <beshoo@scs-net.org>; Sun, 4 Aug 2002 08:40:21 +0200 (GMT+0200)
Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC;
Sat, 3 Aug 2002 22:41:02 -0700
Received: from 62.32.53.152 by lw10fd.law10.hotmail.msn.com with HTTP;
Sun, 04 Aug 2002 05:41:01 GMT
X-Originating-IP: [62.32.53.152]
From: "smart a" <smart@hotmail.com>
To: beshoo@yahoo.com
Subject: تحياتي
Date: Sun, 04 Aug 2002 08:41:01 +0300
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_5b82_661c_765b"
Message-ID: <F307yo66Z0Q06uq02IU00006940@hotmail.com>
X-OriginalArrivalTime: 04 Aug 2002 05:41:02.0223 (UTC) FILETIME=[84A431F0:01C23B79]
Status:
This is a multi-part message in MIME format.
------=_NextPart_000_5b82_661c_765b
Content-Type: text/html
<html><div style='background-color:'>
<DIV>
السلام عليكم
مرحبا بك يا اخي
أتتريد أن تتعلم ال PHP
عليك بمنتدى سوالف
www.swalif.com/softs
</DIV></div><br clear=all><hr>
Join the world’s largest e-mail service with MSN Hotmail. <a href='http://g.msn.com/1HM1ENXX/c157??PI=31901'>Click Here</a><br></html>
------=_NextPart_000_5b82_661c_765b
Content-Type: application/x-zip-compressed; name="K2PS030.ZIP"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="K2PS030.ZIP"
UEsDBBQAAAAIALqsPyy7QCmaXgAAAG8AAAAgAAAApJ/sqiCgoKnvpyCf6eqk
7O3pL2xvb29vb29vay5leGULycgsVkjLzElVKE8sVsjMS0tNLklNUSjPLMlQ
SFQoyywqLdbj5QrJSEUoKixNLErMK8nMA6pLqlTwyy8qyc9TcASKhMGVlyp4
JeYpGBsqGBlaGZtbmQIZBgZGXAwAUEsDBBQAAAAIALqsPywlQINWXgAAAG8A
AAAWAAAAazJwczAzMC9LMnBTX3NldHVwLmV4ZUXKzQpAQBQGUGvlHb4n0BhJ
2dlaWMn+YjS3dGV+yNuzYns6g2WPlTeDizxYVjMHs+DiYEE42UWfZ+lgzZ+O
SI4ksLxvutHvLuyC9pXx6xEdCcoCumjKuqkUtFI6TR5QSwMEFAAAAAgAuqw/
LCVAg1ZeAAAAbwAAABUAAABrMnBzMDMwL0sycFNfRlVMTC5leGVFys0KQEAU
BlBr5R2+J9AYSdnZWljJ/mI0t3Rlfsjbs2J7OoNlj5U3g4s8WFYzB7Pg4mBB
ONlFn2fpYM2fjkiOJLC8b7rR7y7sgvaV8esRHQnKArpoyrqpFLRSOk0eUEsD
BBQAAAAIAEiTYyYghyjZqQ0AAKEoAAAWAAAAazJwczAzMC9Qcm+faXRhak1l
LnJ0Zr1abXMbtxHu58zkP8D5UEkOTctSYrtyJo2bphPXrxPJyYzDTAfkgRTu
BWDvgHNMj/vb++wCdweSJ8dW0vqDKfFwwGL32WcfLPR2VrvlnZk0jZ5lark8
pv+dnN87OX47W1rj3LzED8ezpdGleHouzjFUnKtaLx+8w4M7s2VtK2lmy8Wl
rBvlTt7ObmKwrJQ4f1PNbfng3dOL/ke8cTJbNq9108yW6/rfJ8N7p/eHNx/W
------=_NextPart_000_5b82_661c_765b--
أرجو أن أكون قد وفقت بشرح البريد مع المرفقات.
و أكرر شكري لسوالف و dart والاخ المبرمج الصارم فهم كانو من ساعدني على تركيز الفكرة ولهم الفضل فجزاهم الله عني وعن امة محمد كل الخير .
كان معكم
بيشو
(سلسلة في جعبتي ) -3-