无法从命令行使用Mail.php

时间:2012-07-05 17:11:48

标签: php email ubuntu cron smtp

我有一个PHP脚本,它将成为一个cron作业,它工作正常,直到我添加了我一直在使用的电子邮件脚本。

之前我在整个网站上都使用过电子邮件脚本,但是当我尝试从命令行使用它运行cron作业时,它失败了。

邮件脚本如下所示

    <?php

require_once "Mail.php";

function sendMail($to, $from, $subject, $message) {

        $no_errors = true;

        $host = "ssl://smtp.server.com";
        $port = "465";
        $username1 = "username";
        $password = "password";

        $headers = array ('From' => 'myfromemail@myemail.com',
          'To' => $to,
          'Subject' => $subject);
        $smtp = Mail::factory('smtp',
          array ('host' => $host,
            'port' => $port,
            'auth' => true,
            'username' => $username1,
            'password' => $password));

        $mail = $smtp->send($to, $headers, $message);

        if (PEAR::isError($mail)) {

            $no_errors = false;

            echo $mail->getMessage();

        } else {

            $no_errors = true;

         }

        return $no_errors;

        }

?>

如果我注释掉包含send_mail.php,它可以正常工作,但不会发送电子邮件。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您需要确保在从cron运行脚本时,它具有正确的工作文件夹集,因此可以加载mail.php。使用getcwd()chdir()函数是您需要使用的两个函数。

通常,当从Web浏览器(在Apache服务器上)运行时,工作目录为/var/www,但是从cron开始,它通常是文件系统的根/

答案 1 :(得分:1)

当包含外部文件时,您需要知道文件的位置,然后知道PHP将在哪里查找它。您可以使用get_include_path()检查其外观,并使用set_include_path()进行设置。设置新的时,您希望添加(而不是替换)安装Mail.php的目录。使用get_include_path() . PATH_SEPARATOR . $yourPath作为新值。

答案 2 :(得分:1)

运行cron时的标准文件夹可能与包含此include的文件夹不同。试试这个:

require_once realpath( dirname( __FILE__ ) . '/Mail.php' );

在一般情况下,您可以根据需要添加..或文件夹结构 - 它应该仍然有用。

答案 3 :(得分:0)

从命令行尝试“找到Mail.php”,然后在require_once

中尝试此脚本的完整路径

当通过cron:

运行时,还尝试将响应转储到日志文件中

Cron Job Log - How to Log?