في هذا الدرس ستحتاج بعض الأمثلة للتعديل بما يتوافق مع حالتك لتعمل بشكل صحيح (مثل كلمات السّر)، أمّا الباقي فمعظمه سيكون قابلاً للنسخ واللصق.
حول دالّة mail() في لغة PHP
تَستخدِم دالّة mail() البرنامج الموجود في مسار sendmail_path
لإرسال رسائل البريد الإلكتروني. وهذا معدٌّ كـَsendmail بشكلٍ افتراضي.
ومع أن معظم تنصيبات نظام Linux تملك sendmail
مثبتة بشكل مسبق، فإنّك ستواجه بعض الصعوبات في إعداد تسجيلات SPF/PTR
وتوليد مفاتيح DKIM
وبعض الأمور الأخرى حتى تتأكد بأن رسالة البريد المرسلة بواسطة سكربت الـPHP لن يتم تعليمه كرسالة بريدٍ ضارة (spam). يمكن استخدام بروتوكول MSMTP
- وهو أحد عملاء SMTP
- لإرسال رسائل البريد باستخدام خوادم SMTP
من طرف ثالث، ويمكن استخدام ذلك في دالّة mail()
عوضاً عن sendmail
.
التثبيت
لتثبيت برتوكول MSMTP
على نظام Fedora Linux استخدم yum
كالاتي:
yum install msmtp
وبما أن مستودع CentOs لا يحتوي على حزمة RPM
لـMSMTP
، فإننا سنحتاج الى تنصيبها من المصدر:
yum install make gcc pkgconfig wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download tar -xvf msmtp-1.4.31.tar.bz2 cd msmtp-1.4.31 ./configure make make install
في وقت كتابة هذا المقال فإن آخر إصدار متوفر هو 1.4.31، ولكن قد تتوفر إصدارات أخرى في المستقبل، وللحصول عليها قم بزيارة هذه الصفحة.
على توزيعة Ubuntu/Debian استخدم apt-get
:
apt-get install msmtp
ولمستخدمي Arch Linux :
sudo pacman -S msmtp
إعداد بروتوكول MSMTP
إن ملف الإعدادات الخاص ببروتوكول MSMTP
محفوظ في ~/.msmtprc
لكل مستخدم، وملف الإعدادات الشامل للنظام هو /etc/msmtprc
.
قم الآن بفتح ملف الإعدادات في دليلك (directory):
vi ~/.msmtprc
قم بإضافة هذه الأسطر إلى حساب Yahoo:
account yahoo tls on tls_starttls off tls_certcheck off auth on host smtp.mail.yahoo.com user user1 from user1@yahoo.com password yourYahooPa5sw0rd
وبالنسبة للـGmail استخدم الإعدادات التالية:
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user user1@gmail.com from user1@gmail.com password yourgmailPassw0rd
يمكن أن يحتوي هذا الملف على أكثر من حساب، فقط تأكد بأن تكون قيمة account
لكل قسم مختلفة عن الأخرى. قم بحفظ الملف واستعمل chmod
لجعل هذا الملف قابلاً للقراءة فقط من قبل المالك لأنه يحتوي على كلمات مرور. الخطوة التالية تعد إجبارية لأن بروتوكول msmtp
لن يعمل إذا كانت الصلاحيات أكثر من 600.
chmod 600 ~/.msmtprc
قبل تنفيذ ذلك في PHP، تحقق باستخدام سطر الأوامر لتتأكد أن كل شيء يعمل بشكل سليم. للقيام بذلك، قم بإنشاء ملفٍ نصيٍّ عادي وضع فيه النص الآتي (النص عبارة عن رسالة بريد قصيرة):
echo -e "From: Alice <alice@example.com> \n\ To: Bob <bob@domain.com> \n\ Subject: Hello World \n\ \n\ This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt
قم الآن بإرسال البريد:
cat sample_email.txt | msmtp --debug -a gmail bob@domain.com
استبدل كلمة gmail
بكلمة yahoo
أو ما قمت بإدخاله مسبقاً في خيار account
. سوف ترى العديد من الرسائل بسبب المعطى --debug
. يُستخدَم هذا لجعل اكتشاف وتصحيح الأخطاء أمراً سهلاً إذا لم تعمل الأمور كما يجب.
إذا تلقّى bob@domain.com
هذا البريد فإن كل شيء قد تم تنصيبه بشكل صحيح. لذلك قم بنسخ هذا الملف إلى مُجلّد /etc
باستخدام السطر التالي:
cp -p ~/.msmtprc /etc/.msmtp_php
قم بتغيير الملكية إلى اسم المستخدم الذي يعمل الخادوم تحته. قد يكون ذلك apache
، www-data
أو nobody
اعتماداً على توزيعة الـLinux الموجودة في الخادوم الإفتراضي الخاص بك (VPS) وعلى خادوم الويب المثبت:
chown www-data:www-data /etc/.msmtp_php
إعداد وتهيئة PHP
افتح ملف php.ini
والذي قد يختلف مكان وجوده باختلاف نظام التشغيل (OS) ونوع PHP المثبت (مثل PHP CGI
، mod_php
، PHP-FPM
…الخ):
vi /etc/php5/php.ini
ابحث عن السطر الاتي:
sendmail_path =
وعندما تجده قم بتعديله عن طريق إضافة المسار الخاص بأمر msmtp
ليصبح كما يلي:
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"
يدوياً، أنشىء ملف سجل (log file) وقم بتغيير ملكيته (ownership) الى اسم المستخدم الذي يعمل به خادوم الويب:
touch /var/log/msmtp.log chown www-data:www-data /var/log/msmtp.log
أعد تشغيل خادوم الويب لتطبيق التغييرات:
service httpd restart
في نظام Arch Linux يتم ذلك باستخدام الأمر systemctl
:
systemctl restart httpd
اعتماداً على نظام التشغيل وخادوم الويب قم باستبدال httpd
بالاسم المناسب. إذا كانت PHP
تعمل كعملية منفصلة (مثل PHP-FPM
) قم بإعادة تشغيله عوضاً عن ذلك:
service php5-fpm restart
ولإختبار هذه التنصيبة، قم بإنشاء سكربت PHP مع دالّة mail()
بسيطة:
<?php if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function.")) print "Email successfully sent"; else print "An error occured"; ?>
قم بالدخول إلى هذا الملف باستخدام إحدى المتصفحات:
http://www.example.com/file.php
اذا لم يتم إرسال البريد فيمكنك التحقق من وجود أي أخطاء عبر سجل msmtp
:
tail /var/log/msmtp.log
أخطاء شائعة
اذا لم يتم إرسال البريد عند استخدام سكربت PHP، فعليك التحقق مما يلي:
-
تحقق من أنك قد قمت بالتعديل على ملف
php.ini
الصحيح. يمكن التأكد والتحقق من ذلك عن طريق إنشاء ملفphpinfo()
; والتأكد من قسمLoaded Configuration File
. -
قد يكون المسار الى ملف إعدادات
msmtp
خاطئًا أو أن الخادوم لا يملك الصلاحية لقراءة هذا الملف. - تحقق اذا ما تم إرسال أي بريد وذلك عن طريق تشغيل السكربت باستخدام سطر أوامر PHP:
php /var/www/html/file.php
ترجمة -وبتصرّف- للمقال How To Use Gmail or Yahoo with PHP mail() Function لصاحبه Jesin A
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.