إرسال البريد الإلكتروني في PHP: من الدالة المدمجة mail() إلى المكتبات القوية
يعد إرسال رسائل البريد الإلكتروني إحدى الوظائف الرئيسية لأي تطبيق ويب: تسجيل المستخدمين، استعادة كلمات المرور، الإشعارات، النشرات البريدية. في PHP، توجد عدة طرق: من أبسط دالة مدمجة mail() إلى مكتبات متخصصة مثل PHPMailer و SwiftMailer. في هذه المقالة، سنشرح كل طريقة بالتفصيل، ونعرض أمثلة على الكود، ونقدم توصيات للاختيار.
1. الدالة المدمجة mail()
الدالة mail() هي أبسط طريقة لإرسال رسالة بريد إلكتروني. تستخدم خادم البريد الذي تم تكوينه في إعدادات PHP (sendmail_path أو SMTP). ومع ذلك، فإن إمكانياتها محدودة، ولا تدعم المتطلبات الحديثة: تنسيق HTML، المرفقات، مصادقة SMTP.
مثال أساسي
<?php$to = 'user@example.com';$subject = 'موضوع الرسالة';$message = 'مرحباً! هذه رسالة اختبارية.';$headers = 'From: no-reply@mysite.ru' . "\\r" . 'Reply-To: support@mysite.ru' . "\\r" . 'X-Mailer: PHP/' . phpversion();
if (mail($to, $subject, $message, $headers)) { echo 'تم إرسال الرسالة';} else { echo 'خطأ في الإرسال';}?>عيوب mail()
- لا تدعم رسائل HTML (يجب تحديد
Content-Type: text/htmlيدوياً) - استحالة إرفاق الملفات دون معالجات معقدة لـ MIME
- لا يوجد تشفير أو مصادقة SMTP
- غالباً ما تصل الرسائل إلى البريد العشوائي بسبب عدم وجود ترويسات صحيحة
- صعوبة تصحيح الأخطاء
للمشاريع الحديثة، لا يُنصح باستخدام mail(). من الأفضل استخدام مكتبات متخصصة.
2. PHPMailer — المعيار الذهبي
PHPMailer هي المكتبة الأكثر شيوعاً لإرسال البريد الإلكتروني في PHP. تدعم SMTP و SSL/TLS ورسائل HTML والمرفقات والنص البديل والمستلمين المتعددين وغير ذلك الكثير. يتم تثبيتها عبر Composer:
composer require phpmailer/phpmailerمثال للإرسال عبر SMTP (Gmail)
<?phpuse PHPMailer\\PHPMailer\\PHPMailer;use PHPMailer\\PHPMailer\\SMTP;use PHPMailer\\PHPMailer\\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try { // إعدادات الخادم $mail->SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your@gmail.com'; $mail->Password = 'your-app-password'; // كلمة مرور التطبيق $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465;
// المرسل والمستلمين $mail->setFrom('from@example.com', 'المرسل'); $mail->addAddress('user@example.com', 'المستلم'); $mail->addReplyTo('info@example.com', 'معلومات');
// المرفقات (اختياري) $mail->addAttachment('/path/to/file.pdf', 'document.pdf');
// المحتوى $mail->isHTML(true); $mail->Subject = 'موضوع الرسالة'; $mail->Body = '<h1>مرحباً!</h1><p>هذه الرسالة تحتوي على <b>HTML</b>.</p>'; $mail->AltBody = 'مرحباً! هذه هي النسخة النصية من الرسالة.';
$mail->send(); echo 'تم إرسال الرسالة';} catch (Exception $e) { echo "خطأ: {$mail->ErrorInfo}";}?>مزايا PHPMailer
- دعم كامل لـ SMTP مع المصادقة
- توليد تلقائي لترويسات MIME
- دعم المرفقات والصور المضمنة
- العمل مع إصدار HTML والنصي للرسالة
- رسائل خطأ مفصلة
- دعم نشط من المجتمع
3. SwiftMailer — بديل بهندسة مرنة
SwiftMailer هي مكتبة قوية أخرى (تم استبدالها الآن بـ