مكتبة PHPMailer: إرسال بريد إلكتروني احترافي باستخدام PHP
يُعد إرسال البريد الإلكتروني إحدى الوظائف الأساسية لأي تطبيق ويب حديث. غالبًا ما تكون الدالة المدمجة في PHP mail() غير مرنة وآمنة بما يكفي: فهي لا تدعم مصادقة SMTP، أو تشفير TLS/SSL، أو إرسال رسائل HTML مع مرفقات، ولا تعمل دائمًا بشكل صحيح على الاستضافات المشتركة. حل هذه المشكلات هو مكتبة PHPMailer، التي أصبحت المعيار الفعلي لإرسال البريد الإلكتروني باستخدام PHP.
ما هي PHPMailer؟
PHPMailer هي مكتبة قوية وسهلة الاستخدام لإرسال البريد الإلكتروني من نصوص PHP. وهي تدعم:
- الإرسال عبر خادم SMTP (Gmail، Yandex، Mail.ru، البريد الإلكتروني للشركات)؛
- تشفير TLS و SSL؛
- رسائل HTML مع مرفقات (صور، PDF، مستندات)؛
- ترميز UTF-8 والعمل مع أي لغة (العربية، الصينية، إلخ)؛
- نص بديل (نص عادي) لعملاء البريد الإلكتروني بدون HTML؛
- توقيع DKIM و SPF للحماية من البريد العشوائي؛
- العمل عبر sendmail المحلي أو mail() المدمج كخيار احتياطي.
تثبيت PHPMailer
أسهل طريقة هي عبر Composer. في الطرفية، نفذ الأمر في جذر مشروعك:
composer require phpmailer/phpmailerإذا لم يتم استخدام Composer، يمكنك تنزيل الأرشيف من GitHub وتضمين الملفات يدويًا:
require_once '/المسار/إلى/PHPMailer/src/PHPMailer.php';require_once '/المسار/إلى/PHPMailer/src/SMTP.php';require_once '/المسار/إلى/PHPMailer/src/Exception.php';مثال أساسي لإرسال رسالة عبر SMTP Gmail
لنلقِ نظرة على إعداد بسيط لإرسال رسالة عبر خادم SMTP لـ Gmail. ملاحظة: للعمل، ستحتاج إلى إنشاء كلمة مرور تطبيق في إعدادات حساب Google (أو استخدام خيار أقل أمانًا "الوصول إلى التطبيقات غير الموثوقة").
<?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_OFF; // التصحيح (0 - إيقاف، 2 - تفصيلي) $mail->isSMTP(); // استخدام SMTP $mail->Host = 'smtp.gmail.com'; // خادم SMTP $mail->SMTPAuth = true; // تفعيل المصادقة $mail->Username = 'your-email@gmail.com'; // اسم مستخدم SMTP $mail->Password = 'your-app-password'; // كلمة مرور SMTP (كلمة مرور التطبيق) $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL $mail->Port = 465; // المنفذ لـ SSL (587 لـ TLS)
// المرسل والمستلم $mail->setFrom('from@example.com', 'اسم المرسل'); $mail->addAddress('to@example.com', 'اسم المستلم'); // يمكن إضافة عدة $mail->addReplyTo('reply@example.com', 'الرد');
// المرفقات (اختياري) $mail->addAttachment('/المسار/إلى/الملف.pdf', 'الاسم.pdf');
// محتوى الرسالة $mail->isHTML(true); // تنسيق HTML $mail->Subject = 'تحية من PHPMailer!'; $mail->Body = '<b>هذه رسالة HTML</b> تحتوي على نص عربي.'; $mail->AltBody = 'هذا نص بديل لعملاء البريد الإلكتروني بدون HTML.';
$mail->send(); echo 'تم إرسال الرسالة بنجاح';} catch (Exception $e) { echo "خطأ: {$mail->ErrorInfo}";}?>الإرسال عبر Yandex.Mail
بالنسبة لـ Yandex.Mail، تتغير المعلمات بشكل طفيف. مهم: في إعدادات صندوق البريد، يجب السماح بالوصول عبر بروتوكول IMAP/SMTP وإنشاء كلمة مرور تطبيق (إذا تم تفعيل المصادقة الثنائية).
$mail