La idea es hacer un script que utilice una cuenta de correo y su password y envíe a través de nuestro SMTP (QMAIL). En este post se verá que hay que editar el php.ini para conseguir que PEAR funcione correctamente y permita al script enviar el email via SMTP.
Utilizaremos el código de ejemplo que está en Cibercity
# vim /root/scripts/mail.php
<?php
include("Mail.php");
/* mail setup recipients, subject etc */
$recipients = "feedback@yourdot.com";
$headers["From"] = "user@somewhere.com";
$headers["To"] = "feedback@yourdot.com";
$headers["Subject"] = "User feedback";
$mailmsg = "Hello, This is a test.";
/* SMTP server name, port, user/passwd */
$smtpinfo["host"] = "smtp.mycorp.com";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "smtpusername";
$smtpinfo["password"] = "smtpPassword";
/* Create the mail object using the Mail::factory method */
$mail_object =& Mail::factory("smtp", $smtpinfo);
/* Ok send mail */
$mail_object->send($recipients, $headers, $mailmsg);
?>
Lo ejecutamos como
# /usr/bin/php mail.php PHP Warning: include(Mail.php): failed to open stream: No such file or directory in /root/scripts/mail.php on line 2 PHP Warning: include(Mail.php): failed to open stream: No such file or directory in /root/scripts/mail.php on line 2 PHP Warning: include(): Failed opening 'Mail.php' for inclusion (include_path='.:') in /root/scripts/mail.php on line 2 PHP Fatal error: Class 'Mail' not found in /root/scripts/mail.php on line 16
Cambiamos un poco el script así para añadir el path hasta la clase
include ("/usr/share/pear/Mail.php");
#include("Mail.php");
Lo ejecutamos otra vez
/usr/bin/php mail.php PHP Deprecated: Assigning the return value of new by reference is deprecated in /usr/share/psa-pear/Mail.php on line 134 PHP Deprecated: Assigning the return value of new by reference is deprecated in /usr/share/psa-pear/PEAR.php on line 563 PHP Deprecated: Assigning the return value of new by reference is deprecated in /usr/share/psa-pear/PEAR.php on line 566 PHP Warning: include_once(Net/SMTP.php): failed to open stream: No such file or directory in /usr/share/psa-pear/Mail/smtp.php on line 206 PHP Warning: include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:') in /usr/share/psa-pear/Mail/smtp.php on line 206 PHP Fatal error: Class 'Net_SMTP' not found in /usr/share/psa-pear/Mail/smtp.php on line 210
Se queja de la clase Net_SMTP pero parece que lo que pasa es que no lo encuentra. Volvemos a añadir el código include quedando así:
< ?php
include ("/usr/share/psa-pear/Mail.php");
include ("/usr/share/psa-pear/Net/SMTP.php");
#include("Mail.php");
Volvemos a ejecutar:
PHP Warning: include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:') in /usr/share/psa-pear/Mail/smtp.php on line 206 PHP Fatal error: Class 'Net_SMTP' not found in /usr/share/psa-pear/Mail/smtp.php on line 210
Sigue quejándose aunque tenemos comprobado que la clase Mail o SMTP existe. Es un tema de configuración php.ini
Hay que seguir el tutorial de esta página para configurar bien el PEAR
http://pear.php.net/manual/es/installation.checking.php
En definitiva sería que editamos php.ini en la línea
;include_path = ".:" include_path = "/usr/share/pear"
Reconfiguramos apache y volvemos a ejecutar. Si no da error es que era un problema de configuración PEAR PHP. Podemos ver si ha llegado con éxito a través del log de Qmail
Mar 25 11:38:14 s1 qmail: 1364207894.799250 delivery 33: success: 173.194.67.27_accepted_message./Remote_host_said:_250_2.0.0_OK_1364207897_wu7si4790118wjb.172_-_gsmtp/
Links
http://www.cyberciti.biz/tips/howto-php-send-email-via-smtp-authentication.html
http://goonanism.com/blog/2010/06/08/using-pear-to-send-email-via-smtp/
http://pear.php.net/manual/es/installation.checking.php
¿Te ha ayudado este artículo?
☕ Invítame a un café