كيفية إرسال بريد إلكتروني باستخدام دالة PHP mail()

⚡ ملخص ذكي

دالة البريد في PHP هي دالة مدمجة تُرسل البريد الإلكتروني مباشرةً من سكربت PHP باستخدام إعدادات SMTP الخاصة بالخادم. يشرح هذا الدليل صيغة دالة mail() ومعاملاتها، وتكوين SMTP في ملف php.ini، وتنظيف مدخلات المستخدم باستخدام filter_var، وإرسال بريد إلكتروني آمن، واستخدام PHP.Mailلضمان التوصيل الموثوق.

  • 📧 ما تفعله دالة mail(): تقوم الدالة mail() بإرسال بريد إلكتروني من خلال برنامج نصي، مع أخذ المستلم والموضوع والرسالة والرؤوس الاختيارية.
  • 📨 بروتوكول نقل البريد الإلكتروني SMTP: يعتمد PHP mail على SMTP، والذي يتم تحديد المضيف والمنفذ والمصادقة الخاصة به في ملف التكوين php.ini.
  • 📋 CC و BCC: تضيف الرؤوس الاختيارية مستلمين بنسخة كربونية ومستلمين بنسخة كربونية مخفية، مع إخفاء BCC عن المستلمين الآخرين.
  • 🛡️ تعقيم المدخلات: تقوم الدالة filter_var مع FILTER_SANITIZE_EMAIL و FILTER_VALIDATE_EMAIL بمنع حقن الترويسة من مدخلات نموذج الاتصال.
  • 🔒 Mail: يؤدي تشفير الاتصال باستخدام SSL أو TLS إلى حماية محتويات الرسالة من القراءة أثناء النقل.
  • 🧰 استخدم لغة PHPMailإيه: PHPMailيضيف er مصادقة SMTP والمرفقات ورسائل البريد الإلكتروني بتنسيق HTML، مما يجعله أكثر موثوقية من البريد الخام ().
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي تهيئة لغة PHPMailer with SMTP and suggest fixations that keep your emails away to spam folder.

PHP Mail

ما هو بريد PHP؟

PHP mail هي وظيفة PHP المدمجة التي تُستخدم لإرسال رسائل البريد الإلكتروني من نصوص PHP البرمجية.

تقبل وظيفة البريد المعلمات التالية:

  • عنوان البريد الإلكتروني
  • الموضوع
  • رسالتك
  • عناوين البريد الإلكتروني CC أو BCC

لماذا ومتى نستخدم PHP mail

تُعد وظيفة البريد مفيدة في العديد من المواقف:

  • إنها طريقة فعالة من حيث التكلفة لإخطار المستخدمين بالأحداث المهمة.
  • اسمح للمستخدمين بالتواصل معك عبر البريد الإلكتروني من خلال توفير نموذج الاتصال بنا على موقع الويب الذي يرسل المحتوى المقدم عبر البريد الإلكتروني.
  • يمكن للمطورين استخدامه لتلقي أخطاء النظام عبر البريد الإلكتروني.
  • يمكنك استخدامه لإرسال البريد الإلكتروني إلى المشتركين في النشرة الإخبارية الخاصة بك.
  • يمكنك استخدامه لإرسال روابط إعادة تعيين كلمة المرور إلى المستخدمين الذين ينسون كلمات مرورهم.
  • يمكنك استخدامه لإرسال روابط التفعيل والتأكيد عبر البريد الإلكتروني. وهذا مفيد عند تسجيل المستخدمين والتحقق من عناوين بريدهم الإلكتروني.

إرسال البريد باستخدام PHP

تحتوي دالة البريد الإلكتروني في PHP على الصيغة الأساسية التالية.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

هنا،

  • "$to_email_address" هو عنوان البريد الإلكتروني لمتلقي البريد
  • "$subject" هو موضوع البريد الإلكتروني
  • "$message" هي الرسالة التي سيتم إرسالها.
  • "[$headers]" اختياري؛ ويمكن استخدامه لتضمين معلومات مثل CC وBCC.
    • CC هو اختصار لعبارة "نسخة كربونية". يُستخدم هذا الاختصار عندما ترغب في إرسال نسخة إلى شخص معني، أي أن رسالة بريد إلكتروني تُرسل كشكوى إلى شركة ما يمكن إرسالها أيضًا كنسخة إلى مجلس الشكاوى.
    • BCC هو اختصار لعبارة "نسخة كربونية مخفية". وهو مشابه لعبارة CC، ولكن عناوين البريد الإلكتروني الموجودة في قسم BCC لا تظهر للمستلمين الآخرين.

الاشارات Mail Transmission البروتوكول (SMTP)

يستخدم PHP mail Mail Transmission بروتوكول (SMTP) لإرسال البريد.

على الخادم المستضاف، تكون إعدادات SMTP قد تم ضبطها بالفعل.

يمكن ضبط إعدادات البريد الإلكتروني SMTP من ملف "php.ini" الموجود في مجلد تثبيت PHP.

لتكوين إعدادات SMTP على جهازك المحلي، بافتراض أنك تستخدم XAMPP على Windows، حدد موقع ملف "php.ini" في الدليل "C:\xampp\php".

  • افتح الملف باستخدام برنامج المفكرة أو أي محرر نصوص آخر. سنستخدم برنامج المفكرة في هذا المثال. انقر على قائمة "تحرير".

الاشارات Mail Transmission بروتوكول

  • انقر على قائمة "بحث..."

الاشارات Mail Transmission بروتوكول

  • سيظهر مربع حوار البحث

الاشارات Mail Transmission بروتوكول

  • انقر على زر "البحث عن التالي".

الاشارات Mail Transmission بروتوكول

حدد موقع الإدخالات الموجودة ضمن [وظيفة البريد]. عادةً ما تبدو الأسطر الافتراضية كما يلي:

  • ; SMTP = المضيف المحلي
  • ; ميناء smtp = 25

قم بإزالة الفواصل المنقوطة قبل SMTP و smtp_port، واضبط SMTP على عنوانك. خادم SMTP والمنفذ الخاص بمنفذ SMTP. يجب أن تبدو إعداداتك كما يلي:

  • SMTP = smtp.example.com
  • ميناء smtp = 25

ملاحظة: يمكن الحصول على إعدادات SMTP من مزود خدمة استضافة المواقع الإلكترونية الخاص بك. إذا كان الخادم يتطلب مصادقة، فأضف الأسطر التالية:

  • auth_username = example_username@example.com
  • auth_password = example_password

احفظ التغييرات الجديدة وأعد تشغيل Apache الخادم.

PHP Mail مثال

لنلقِ نظرة الآن على مثال يرسل بريدًا إلكترونيًا بسيطًا.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

الإخراج:

الاشارات Mail Transmission بروتوكول

ملاحظة: المثال أعلاه يأخذ فقط المعلمات الأربع الإلزامية. يجب عليك استبدال عنوان البريد الإلكتروني الوهمي المذكور أعلاه بعنوان بريد إلكتروني حقيقي.

تطهير مدخلات البريد الإلكتروني للمستخدم

يستخدم المثال أعلاه قيمًا مبرمجة في الكود المصدر لعنوان البريد الإلكتروني وتفاصيل أخرى من أجل التبسيط.

لنفترض أنك مطالب بإنشاء نموذج "اتصل بنا" حيث يقوم المستخدمون بملء التفاصيل ثم إرسالها.

  • يمكن للمستخدمين إدخال التعليمات البرمجية في رؤوس الرسائل عن طريق الخطأ أو عن قصد، مما قد يؤدي إلى إرسال رسائل بريد إلكتروني غير مرغوب فيها.
  • لحماية نظامك من مثل هذه الهجمات، يمكنك إنشاء وظيفة مخصصة لتطهير القيم والتحقق من صحتها قبل إرسال البريد.

لنقم بإنشاء دالة مخصصة للتحقق من صحة عنوان البريد الإلكتروني وتنظيفه باستخدام الدالة المدمجة filter_var. تُستخدم الدالة filter_var لتنظيف بيانات المستخدم والتحقق من صحتها.

يحتوي على بناء الجملة الأساسي التالي.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

هنا،

  • "filter_var(...)" هي وظيفة التحقق من الصحة والتعقيم
  • "الحقل $" هو قيمة الحقل المراد تصفيته.
  • "نوع_التعقيم" هو نوع التعقيم الذي سيتم إجراؤه على الحقل، مثل:
    • فلتر_التحقق_من_البريد_الإلكتروني – تُرجع القيمة "صحيح" لعناوين البريد الإلكتروني الصحيحة و"خطأ" لعناوين البريد الإلكتروني غير الصحيحة.
    • فلتر_تعقيم_البريد_الإلكتروني – يزيل الأحرف غير القانونية من عناوين البريد الإلكتروني، بحيث يتم اختصار العنوان الذي يحتوي على أحرف دخيلة إلى info@domain.com.
    • تعقيم الفلترURL – يزيل الأحرف غير المسموح بها من URLs، تاركاً عنواناً نظيفاً مثل https://www.example.com.
    • FILTER_SANITIZE_STRING يزيل هذا الخيار الوسوم من القيم النصية، لذا تصبح العبارة am bold هي am bold. لاحظ أن هذا الخيار مُهمل في PHP 8.1؛ استخدم htmlspecialchars() بدلاً منه.

يستخدم الكود أدناه دالة مخصصة لإرسال بريد إلكتروني آمن.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

الإخراج:

تطهير مدخلات البريد الإلكتروني للمستخدم

Mail

يمكن اعتراض رسائل البريد الإلكتروني أثناء إرسالها من قبل مستلمين غير مقصودين.

قد يؤدي ذلك إلى كشف محتويات البريد الإلكتروني لمستلمين غير مقصودين.

يحل البريد الآمن هذه المشكلة عن طريق transmitإرسال رسائل البريد الإلكتروني عبر اتصال مشفر باستخدام SSL أو TLS، على سبيل المثال SMTP عبر SSL على المنفذ 465 أو STARTTLS على المنفذ 587.

يقوم التشفير بتشويش الرسالة قبل إرسالها، بحيث لا يمكن قراءتها إلا من قبل خادم البريد الخاص بالمستلم المقصود.

PHPMailer: بديل أفضل لـ mail()

بالنسبة للتطبيقات الحقيقية، يستخدم معظم المطورين لغة PHPMailمكتبة er بدلاً من دالة البريد الخام mail(). PHPMailيقوم النظام بالمصادقة مع خادم SMTP خارجي، مما يحسن بشكل كبير من إمكانية التسليم، ويجعل المرفقات ورسائل البريد الإلكتروني بتنسيق HTML أمرًا بسيطًا.

قم بتثبيته باستخدام Composer، ثم أرسل البريد من خلال اتصال SMTP موثق ومشفر كما هو موضح أدناه.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

بالمقارنة مع دالة mail()، فإن لغة PHPMailيوفر لك er مصادقة SMTP، وتشفيرًا مدمجًا، ودعمًا للمرفقات، ومعالجة أوضح للأخطاء، وهذا هو السبب في أنه الخيار الموصى به لبريد الإنتاج.

الأسئلة الشائعة

السبب الأكثر شيوعًا هو عدم وجود خادم بريد مُهيأ على المضيف المحلي. اضبط قيم SMTP الصحيحة في ملف php.ini، أو استخدم PHPMailتأكد من وجود حساب SMTP موثق. تحقق أيضًا من سجل أخطاء الخادم ومجلد البريد العشوائي.

أضف رؤوسًا تُعيّن MIME-Version إلى 1.0 و Content-Type إلى text/html، ثم ضع ترميز HTML في نص الرسالة. PHPMailيقوم er بمعالجة هذا الأمر تلقائيًا عند تعيين خيار isHTML(true).

تم إيقاف استخدام FILTER_SANITIZE_STRING منذ PHP 8.1. استخدم htmlspecialchars() لتهريب الإخراج للعرض، أو مدققًا محددًا مثل FILTER_VALIDATE_EMAIL، اعتمادًا على ما إذا كنت تقوم بتنظيف القيمة أو التحقق منها.

نعم. ما عليك سوى تزويد الذكاء الاصطناعي بمعلومات مضيف SMTP والمنفذ ونوع الأمان، وسيتمكن من إنشاء كود PHP كامل.Mailقم بإعداد النظام مع المصادقة، والمرسل، والمستلمين، ومعالجة الأخطاء. خزّن بيانات الاعتماد في متغيرات البيئة، وليس في التعليمات البرمجية.

نعم. يمكن للذكاء الاصطناعي تقديم المشورة بشأن سجلات SPF وDKIM وDMARC، واستخدام مرسل SMTP موثق، وتجنب كلمات التحفيز للبريد العشوائي، وتعيين عنوان من صالح، ثم مساعدتك في اختبار إمكانية التسليم.

تلخيص هذه التدوينة بـ: