我有一个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,它可以正常工作,但不会发送电子邮件。
有什么想法吗?
答案 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:
运行时,还尝试将响应转储到日志文件中