Po zainstalowaniu i skonfigurowaniu rozszerzenia PEAR przyszła pora na wykorzystaniu jego możliwości w akcji. Na pierwszy rzut poszło rozszerzenie do obsługi poczty, które diametralnie przyspiesza i ułatwia masowe rozsyłanie e-maili w PHP. Tak więc na początek należałoby przetestować korzystając z dołączonego do manuala przykładu:
<?php include('Mail.php'); $recipients = 'bogumil@co-ma-dostac.com'; $headers['From'] = 'marian@co-wyslal.com'; $headers['To'] = 'bogumil@co-ma-dostac.com'; $headers['Subject'] = 'Test message'; $body = 'Test message'; $params['sendmail_path'] = '/usr/sbin/sendmail'; // Create the mail object using the Mail::factory method $mail_object =& Mail::factory('sendmail', $params); $msg = $mail_object->send($recipients, $headers, $body); if ($msg == true) { echo '<h3>Wiadomość testową wysłano pomyślnie.</h3>'; } else { echo '<h3>Wiadomość nie wysłana!</h3><p>Błąd: ' . $msg . '</p>'; } ?>
Niby wszystko wygląda w porządku, wybrana została metoda wysyłki przy użyciu bezpośrednio sendmail w parametrach została podana prawidłowa ścieżka do sendmaila. Ponadto jest to lekko zmodyfikowany przykład z manuala, tak więc powinien działać prawidłowo.
Mimo wszystko skrypt nie wyświetla informacji o pomyślnej wysyłce, lecz podaje błąd o treści:
sendmail returned error code 127.
Dodatkowo w logach serwera Apache pojawia się taki oto błąd:
sh: /sendmail: No such file or directory.
Wszystko wskazuje na to, że jest to wina włączonego trybu bezpiecznego PHP (safe_mode=on). Szczerze mówiąc nie znalazłem informacji (bo za długo nie szukałem) czemu tak akurat jest i czy da się to jakoś skonfigurować, żeby jednak działało w trybie bezpiecznym. Najszybszym i najłatwiejszym sposobem na pozbycie się tego problemu było wyłączenie trybu safe_mode dla tej domeny, z której uruchamiam powyższy skrypt. Poza tym nie jest mi do niczego potrzebny na moim serwerze.
W pliku php.ini safe_mode jest domyślnie ustawiony na on, tak więc aby zmodyfikować ustawienia dla konkretnej domeny należy edytować plik konfiguracyjny conf/vhost.conf.
<Directory /var/www/vhosts/domenasrutututu.pl/httpdocs> php_admin_value open_basedir /var/www/vhosts/domenasrutututu.pl/httpdocs/:/tmp/:/usr/share/pear/ php_admin_flag safe_mode off </Directory>
Następnie pozostaje tylko przeładowanie ustawień:
/usr/local/psa/admin/sbin/websrvmng -u --vhost-name=domenasrutututu.pl
i skrypt powinien już wysyłać maile prawidłowo.