بسم الله الرحمن الرحيم
ماهى دوال ارسال الايميل smtp؟
اريد معرفة هذة الدوال وكيفية التعامل معاها من ارسال رسالة الى ملفات وصور والخ
بسم الله الرحمن الرحيم
ماهى دوال ارسال الايميل smtp؟
اريد معرفة هذة الدوال وكيفية التعامل معاها من ارسال رسالة الى ملفات وصور والخ
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
الدالة mail هي الدالة المسؤولة عن هذا الأمر، ويمكن أيضًا ان ترسل الايميل عن طريق ال sockets
http://php.net/manual/en/function.mail.php
هذا الأمر يقودنا إلى بروتوكولات الايميل
سنتكلم عن نوعين:
SMTP - يستخدم لارسال الايميلات(لا يوجد لها دوال خاصة سوى المذكورة اعلاه)
IMAP- للوصول إلى الايميلات المخزنة على السيرفر + ارسالها ، ترسل اقل كمية من المعلومات
وتنفع للاتصالات البطيئة.
POP3 - مثل التي في الاعلى لكنها اقل فاعلية
دوال ال php لهذه البروتوكولات هي
http://www.php.net/manual/en/ref.imap.php
لكنها لا تعمل بكفاءة عالية مع ال POP3
ارسال الايميلات عن طريق بروتوكول ال SMTP:SMTP vs mail retrieval
SMTP is a delivery protocol only. It cannot pull messages from a remote server on demand. Other protocols, such as the Post Office Protocol (POP) and the Internet Message Access Protocol (IMAP) are specifically designed for retrieving messages and managing mail boxes. However, SMTP has a feature to initiate mail queue processing on a remote server so that the requesting system may receive any messages destined for it (cf. Remote Message Queue Starting). POP and IMAP are preferred protocols when a user's personal computer is only intermittently powered up, or Internet connectivity is only transient and hosts cannot receive message during off-line periods.
اذا جربت ان ترسل ايميل عن طريق اللينكس مباشرة وبدون اي برامج ماذا ستفعل؟
تتصل بسيرفر ال SMTP وتكتب ايميلاتك بصورة متعاقبة على الشكل التالي:
HELO mydomain.com
MAIL FROM:<romeo@bogus.net>
RCPT TO:<juliet@fakenet.com>
DATA I`m sorry to say that I want to leave you
QUIT
هذا ما يتم كتابته في الشل
HELLO - للبداية
QUIT- للنهاية
ماذا تفعل الدالة mail?
تفتح اتصال كالظاهر اعلاه، تكتب البارمترات بالشكل المحدد وتغلق الاتصال.
كيف ترسل المرفقات؟
مثل ما ترسل المرفقات في النماذج، تحدد الهيدر على شكل multipart وتطبع المرفقات مع الكلام بصورة مختلطة، والسيرفر يحلل الطلب ويقرأه بطريقته.
مثال:
http://www.webcheatsheet.com/PHP/sen...php#attachment
ما المشكلة مع الدالة mail?
لا تنفع عندما تريد ارسال الكثير من الرسائل في حلقة تكرار، مثلا 5000 رسالة.
والسبب مشروح في مانيوال ال php
بما ان الدالة mail تستخدم سيرفر SMTP، اين بيانات الاتصال؟It is worth noting that the mail() function is not suitable for larger volumes of email in a loop. This function opens and closes an SMTP socket for each email, which is not very efficient.
For the sending of large amounts of email, see the » PEAR::Mail, and » PEAR::Mail_Queue packages.
في ملف php.ini
كيف يمكن ارسال بريد على شكل socket
http://www.9lessons.info/2009/10/sen...p-and-php.html
طيب جميع هذه الامور معقدة جدًا، كيف يمكن ان أحصل على دوال بسيطة؟
هناك الكثير من المكتبات، مثل مكتبات الpear
phpmailer
وغيرها
إضافة اخرى:
الدالة mail تعيد قيمة بوليانية TRUE\FALSE
هذه القيمة لا تؤكد ان الايميل تم ارساله بالفعل أم لا
لكنها تنفع في اغلب الاحوال
انصحك بـ phpmailer
صحيح اني واجهت مشاكل واستغنيت عنه لكن اجده ممتاز
__________________
للعلم تم ايقاف تطوير لوحة الاعلانات المتكاملة لكن اللوحة متوفرة للتحميل ولكن الدعم قائم ..
لمراسلتي : hamood0.2009@gmail.com
تابعني على التويتر
جزاك الله الف خيرا اخي الكريم على مجهودك الكبير جدا ده على الموضوع
انا بحاول افهم مكتبة phpmailer عشان كده عاول اعرف الدوالة الى هى بتستخدمها فى ارسال الى اكثر من ايميل والخ
حزاك الله الف خير اخى الكريم
انا بحاول افهمها
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
باختصار انظر إلى هذا الملف(مستخدم ايضًا في الوردبرس):
http://www.tig12.net/downloads/apidocs/wp/wp-includes/PHPMailer.class.html
فيه كل الدوال والمتغيرات
نبذة عن الكلاس - حتى تفهمه بسهولة:
*يدعم الارسال بطرق متعددة : smtp محلي وخارجي (محلي = الدالة mail ، خارجي - سيرفر خارجي مثل الجيميل)، sendmail، Qmail
*يدعم صيغ متعددة: عادي وهتمل
*يدعم ارسال اكثر من مرفق أو لأكثر من مستلم عن طريق الدوال addAttachment,addAddress
الدالة IsSMTP() تحدد الطريقة التي سيرسل بها الايميل ولا تسأل عن نوع الاتصال
هذا مثال كتبته في احدى برمجياتي ارجو ان يفيدك-مع انه مخلوط بدوال من بنائي مثل get_option
ويأخذ محتوى الرسالة من القوالب
مصدر آخر:كود PHP:
function do_mail($to,$subject,$body,$rec_name="",$token=false)
{
global $re;
require_once(CMS_PATH.'external/phpmailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->AddAddress($to, $rec_name);
$mail->Subject = $subject;
switch ($body)
{
default:
break;
case "activate":
$body = file_get_contents(get_option("site_path").get_option("template_path")."mail/activate.html");
$body = str_replace("{url}",get_option('url'),$body);
$body = str_replace("{title}",get_option('site_title'),$body);
$body = str_replace("{name}",$name,$body);
$activate = $re->get_permalink("/users/activate/");
$body = str_replace("{activate}",$activate.$token,$body);
break;
case "pwd_reset":
$body = file_get_contents(CMS_PATH.get_option("template_path")."mail/pwd_reset.html");
$body = str_replace("{url}",get_option('url'),$body);
$body = str_replace("{title}",get_option('site_title'),$body);
$body = str_replace("{name}",$name,$body);
$reset = $re->get_permalink("/users/reset/");
$body = str_replace("{reset}",$reset.$token,$body);
break;
}
$mail->MsgHTML($body);
if (get_option("mail_method")=="smtp")
{
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = get_option("smtp_host");
$mail->Port = get_option("smtp_port");
$mail->Username = get_option("smtp_user");
$mail->Password = get_option("smtp_pass");
}
if($mail->Send())
return true;
else return false;
}
http://www.askapache.com/php/phpfreaks-eric-rosebrocks-phpmailer-tutorial.html
التعديل الأخير تم بواسطة ahmad sadiq ; 21-03-2011 الساعة 01:34 AM
جزاك الله الف اخى الكريم
انا كنت اقصد افهم الكود نفسه
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
اهه فهمت عليك
الطريقة لل SMTP موجوده في كلاسها smtp.class.php
وهي عن طريق ال socket
الاتصال:
تسجيل الدخول، وهو يطبع المعلومات التي يحتاجها سيرفر ال SMTP حسب ما يتم تعريفه من نصوص:كود PHP:
$this->smtp_conn = @fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
كما ترى ان الاتصال باتجاهين، يعني يرسل ويستقبلكود PHP:
fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
$rply = $this->get_lines();
AUTH LOGIN - مثل HELLO و QUIT في الاعلى : مجرد جمل يجب ادخالها للسيرفر
كلمة السر ترسل مشفرة base64
fputs-مثل fwrite لكن للنصوص
بالنسبة للارسال لأكثر من بريد هي ترسلهم جميعًا في stream واحد وتغلق الاتصال مرة واحدة فقط
بالتوفيق
=====
الله يعينك اخوي
حاسس اني لزقتلك في الموضوع
التعديل الأخير تم بواسطة ahmad sadiq ; 21-03-2011 الساعة 02:05 AM
جزاك الله الف خيرا اخى الكريم
الى قلى اية فهمت عليك دية شتيمة
ههههههههههههه
لا ملزقتش فى الموضوع ولا حاجة بال بالعكس الموضوع كده بقى ليه فيدة اكثر
جزاك الله الف خيرا اخى الكريم انت وكل من حاول مساعدة فى الموضوع
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com