0

我有一个 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

4 回答 4

1

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

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

于 2012-07-05T17:15:58.343 回答
1

包含外部文件时,您需要注意文件在哪里,然后 PHP 会在哪里寻找它。您可以使用get_include_path()检查它的外观并使用set_include_path()进行设置。当你设置一个新的时,你想添加(而不是替换)Mail.php 的安装目录。用作get_include_path() . PATH_SEPARATOR . $yourPath新值。

于 2012-07-05T17:16:45.363 回答
1

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

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

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

于 2012-07-05T17:17:27.573 回答
0

尝试从命令行“定位 Mail.php”,然后在您的 require_once 中尝试此脚本的完整路径

当它通过 cron 运行时,还尝试将响应转储到日志文件中:

Cron 作业日志 - 如何记录?

于 2012-07-05T17:14:09.587 回答