البحث في الموقع
المحتوى عن 'sendmail'.
-
في هذا الدرس ستحتاج بعض الأمثلة للتعديل بما يتوافق مع حالتك لتعمل بشكل صحيح (مثل كلمات السّر)، أمّا الباقي فمعظمه سيكون قابلاً للنسخ واللصق. حول دالّة 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