يحتاج العديد من مطوري PHP إلى إرسال بريد إلكتروني من التعليمات البرمجية الخاصة بهم. وظيفة PHP الوحيدة التي تدعم هذا مباشرة هي mail() . ومع ذلك، فهو لا يقدم أي مساعدة للاستفادة من الميزات الشائعة مثل التشفير والمصادقة ورسائل HTML والمرفقات.
يعد تنسيق البريد الإلكتروني بشكل صحيح أمرًا صعبًا بشكل مدهش. هناك عدد لا يحصى من المعايير المتداخلة (والمتضاربة)، التي تتطلب التزامًا صارمًا بقواعد التنسيق والتشفير المعقدة للغاية - الغالبية العظمى من التعليمات البرمجية التي ستجدها عبر الإنترنت والتي تستخدم وظيفة mail() مباشرة هي مجرد خطأ واضح، إن لم تكن غير آمنة!
تُرسل وظيفة PHP mail() عادةً عبر خادم بريد محلي، وعادةً ما يتم تقديمها بواسطة ثنائي sendmail على أنظمة Linux وBSD وmacOS، ومع ذلك، لا يتضمن Windows عادةً خادم بريد محلي؛ يسمح عميل SMTP المتكامل الخاص بـ PHPMailer بإرسال البريد الإلكتروني على جميع الأنظمة الأساسية دون الحاجة إلى خادم بريد محلي. لكن انتبه إلى أنه يجب تجنب وظيفة mail() عندما يكون ذلك ممكنًا؛ يعد استخدام SMTP للمضيف المحلي أسرع وأكثر أمانًا.
من فضلك لا تميل إلى القيام بذلك بنفسك - إذا كنت لا تستخدم PHPMailer، فهناك العديد من المكتبات الممتازة الأخرى التي يجب عليك الاطلاع عليها قبل إنشاء مكتبتك الخاصة. جرب SwiftMailer وLaminas/Mail وZetaComponents وما إلى ذلك.
يتم توزيع هذا البرنامج بموجب ترخيص LGPL 2.1، بالإضافة إلى التزام تعاون GPL. يرجى قراءة الترخيص للحصول على معلومات حول توفر البرامج وتوزيعها.
يتوفر PHPMailer على Packagist (باستخدام الإصدار الدلالي)، والتثبيت عبر Composer هو الطريقة الموصى بها لتثبيت PHPMailer. ما عليك سوى إضافة هذا السطر إلى ملف composer.json الخاص بك:
"phpmailer/phpmailer" : " ^6.9.2 "أو تشغيل
composer require phpmailer/phpmailer لاحظ أنه يتم إنشاء مجلد vendor والبرنامج النصي vendor/autoload.php بواسطة Composer؛ فهي ليست جزءًا من PHPMailer.
إذا كنت ترغب في استخدام مصادقة XOAUTH2، فستحتاج أيضًا إلى إضافة تبعية إلى league/oauth2-client وحزمة محولات الخدمة المناسبة في composer.json الخاص بك، أو إلقاء نظرة على غلاف SendOauth2 الخاص بـ @decomplexity، خاصة إذا كنت باستخدام خدمات مايكروسوفت.
وبدلاً من ذلك، إذا كنت لا تستخدم Composer، فيمكنك تنزيل PHPMailer كملف مضغوط (لاحظ أن المستندات والأمثلة غير مضمنة في الملف المضغوط)، ثم انسخ محتويات مجلد PHPMailer إلى أحد أدلة include_path المحددة في تكوين PHP الخاص بك وقم بتحميل كل ملف فئة يدويًا:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ; إذا كنت لا تستخدم فئة SMTP بشكل صريح (ربما لا تستخدمها)، فلن تحتاج إلى سطر use لفئة SMTP. حتى إذا كنت لا تستخدم الاستثناءات، فلا تزال بحاجة إلى تحميل فئة Exception حيث يتم استخدامها داخليًا.
لم يعد PHPMailer 5.2 (المتوافق مع PHP 5.0 — 7.0) مدعومًا، حتى بالنسبة للتحديثات الأمنية. ستجد أحدث إصدار من 5.2 في الفرع 5.2 المستقر. إذا كنت تستخدم PHP 5.5 أو أحدث (وهو ما يجب أن تستخدمه)، فانتقل إلى الإصدارات 6.x.
أكبر التغييرات هي أن الملفات المصدر موجودة الآن في المجلد src/ ، وأن PHPMailer يعلن الآن عن مساحة الاسم PHPMailerPHPMailer . وهذا له العديد من التأثيرات المهمة – اقرأ دليل الترقية لمزيد من التفاصيل.
على الرغم من أن تثبيت الحزمة بأكملها يدويًا أو باستخدام Composer أمر بسيط ومريح وموثوق، فقد ترغب في تضمين الملفات الحيوية فقط في مشروعك. على الأقل سوف تحتاج إلى src/PHPMailer.php. إذا كنت تستخدم SMTP، فستحتاج إلى src/SMTP.php، وإذا كنت تستخدم POP قبل SMTP (وهو أمر مستبعد جدًا !)، فستحتاج إلى src/POP3.php. يمكنك تخطي مجلد اللغة إذا كنت لا تعرض أخطاء للمستخدمين ويمكنك الاكتفاء بالأخطاء باللغة الإنجليزية فقط. إذا كنت تستخدم XOAUTH2 فستحتاج إلى src/OAuth.php بالإضافة إلى تبعيات Composer للخدمات التي ترغب في المصادقة معها. حقًا، من الأسهل كثيرًا استخدام Composer!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}ستجد الكثير لتلعب به في مجلد الأمثلة، والذي يغطي العديد من السيناريوهات الشائعة بما في ذلك الإرسال عبر Gmail، وإنشاء نماذج الاتصال، والإرسال إلى القوائم البريدية، والمزيد.
إذا كنت تعيد استخدام المثيل (على سبيل المثال، عند الإرسال إلى قائمة بريدية)، فقد تحتاج إلى مسح قائمة المستلمين لتجنب إرسال رسائل مكررة. راجع مثال القائمة البريدية لمزيد من الإرشادات.
هذا كل شيء. يجب أن تكون الآن جاهزًا لاستخدام PHPMailer!
إعدادات PHPMailer الافتراضية هي اللغة الإنجليزية، ولكن في مجلد اللغة، ستجد العديد من الترجمات لرسائل خطأ PHPMailer التي قد تواجهها. تحتوي أسماء الملفات الخاصة بهم على رمز اللغة ISO 639-1 للترجمات، على سبيل المثال fr للغة الفرنسية. لتحديد لغة، يجب عليك إخبار PHPMailer أي لغة ستستخدم، مثل هذا:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );نحن نرحب بالتصحيحات واللغات الجديدة - إذا كنت تبحث عن تصحيحات، قم بتشغيل البرنامج النصي Language/TranslationCompletenessTest.php في مجلد الاختبارات وسيظهر أي ترجمات مفقودة.
ابدأ القراءة على موقع GitHub wiki. إذا كنت تواجه مشكلة، فتوجه إلى دليل استكشاف الأخطاء وإصلاحها حيث يتم تحديثه بشكل متكرر.
يمكن العثور على أمثلة لكيفية استخدام PHPMailer للسيناريوهات الشائعة في مجلد الأمثلة. إذا كنت تبحث عن نقطة بداية جيدة، فنوصيك بالبدء بمثال Gmail.
لتقليل أثر التعليمات البرمجية المنشورة لـ PHPMailer، لا يتم تضمين الأمثلة إذا قمت بتحميل PHPMailer عبر Composer أو عبر تنزيل ملف مضغوط من GitHub، لذلك ستحتاج إما إلى استنساخ مستودع git أو استخدام الروابط أعلاه للوصول إلى الأمثلة مباشرة.
تتوفر وثائق API الكاملة التي تم إنشاؤها عبر الإنترنت.
يمكنك إنشاء وثائق كاملة على مستوى واجهة برمجة التطبيقات (API) عن طريق تشغيل phpdoc في مجلد المستوى الأعلى، وستظهر الوثائق في مجلد docs ، على الرغم من أنك ستحتاج إلى تثبيت PHPDocumentor. قد تجد اختبارات الوحدة مرجعًا جيدًا لكيفية إجراء العمليات المختلفة مثل التشفير.
إذا لم تغطي الوثائق ما تحتاجه، فابحث في العديد من الأسئلة في Stack Overflow، وقبل أن تطرح سؤالاً حول "خطأ SMTP: تعذر الاتصال بمضيف SMTP."، اقرأ دليل استكشاف الأخطاء وإصلاحها.
تستخدم اختبارات PHPMailer PHPUnit 9، مع polyfill للسماح بإجراء اختبارات ذات 9 أنماط على إصدارات PHPUnit وPHP الأقدم.
إذا لم يكن هذا أمرًا عابرًا، فهل هناك شيء يمكنك القيام به للمساعدة؟
يرجى الكشف عن أي نقاط ضعف تم العثور عليها بطريقة مسؤولة - قم بالإبلاغ عن المشكلات الأمنية إلى المشرفين على انفراد.
راجع إرشادات الأمان الخاصة بـ SECURITY وPHPMailer على GitHub.
يرجى إرسال تقارير الأخطاء والاقتراحات وطلبات السحب إلى أداة تعقب مشكلات GitHub.
نحن مهتمون بشكل خاص بإصلاح حالات الحافة وتوسيع تغطية الاختبار وتحديث الترجمات.
إذا عثرت على خطأ في المستندات، أو كنت تريد إضافة شيء ما، فاستمر في تعديل موقع wiki - حيث يمكن لأي شخص تعديله.
إذا كان لديك نسخ git قبل الانتقال إلى مؤسسة PHPMailer GitHub، فستحتاج إلى تحديث أي عناوين URL بعيدة تشير إلى موقع GitHub القديم باستخدام أمر مثل هذا من داخل نسختك:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.gitمن فضلك لا تستخدم مشاريع SourceForge أو Google Code بعد الآن؛ لقد عفا عليها الزمن ولم تعد تتم صيانتها.
يتم توفير وقت التطوير والموارد الخاصة بـ PHPMailer بواسطة Smartmessages.net، نظام التسويق عبر البريد الإلكتروني الوحيد في العالم الذي يضع الخصوصية أولاً.
التبرعات موضع ترحيب كبير، سواء كانت في صورة بيرة أو قمصان أو نقدًا باردًا. تعد الرعاية من خلال GitHub طريقة بسيطة ومريحة لقول "شكرًا" لمشرفي PHPMailer والمساهمين - فقط انقر فوق زر "الراعي" في صفحة المشروع. إذا كانت شركتك تستخدم PHPMailer، ففكر في المشاركة في برنامج دعم المؤسسات الخاص بـ Tidelift.
متاح كجزء من اشتراك Tidelift.
يعمل القائمون على PHPMailer وآلاف الحزم الأخرى مع Tidelift لتقديم الدعم التجاري والصيانة للحزم مفتوحة المصدر التي تستخدمها لبناء تطبيقاتك. يمكنك توفير الوقت وتقليل المخاطر وتحسين سلامة التعليمات البرمجية، مع الدفع لمشرفي الحزم المحددة التي تستخدمها. يتعلم أكثر.
انظر سجل التغيير.
coolbru on SF) وأندي بريفوست ( codeworxtech ) المشروع في عام 2004.