我已经整理了一个PHP脚本,它将一些内容发送到预定义的电子邮件地址,并希望设置一个每天运行该PHP脚本的cron作业。另外,我已将其设置为每次cron运行时也向我发送电子邮件。
我应该提一下,这个脚本使用PHP mail()
函数以html格式发送电子邮件,并且我已经通过浏览器的地址栏直接访问来测试脚本的工作原理。
cron命令:php /home/myuserid/public_html/projects/jobs/index.php
令人惊讶的是,当cron运行时,我通过电子邮件收到以下错误消息:
在连接(。)中使用未初始化的值或在/ usr / bin / sendmail第15行使用字符串。 内容类型:text / html
我甚至不确定从哪里开始寻找问题,所以我需要问:我如何正确设置一个运行PHP脚本的简单cron作业,该脚本使用mail()
函数发送电子邮件?
答案 0 :(得分:1)
如果不查看脚本本身就很难确切地说出问题所在,但潜在的问题是输出流被发送到了错误的位置。在标准POSIX环境中,有2个标准输出流,标准输出(stdout
)和标准错误(stderr
)。在Web浏览器中查看脚本时,stdout
将传递给浏览器,而stderr
将由Apache处理并通常发送到记录器。
从命令行调用时,情况有所不同:可能需要打印到控制台(标准stdout
),但这些内容依赖于脚本和CLI php.ini
之类的内容。 。在您的情况下,引用Content-Type
的行表示输出被发送到错误的位置。您可以使用shell(通常是BASH)重定向重定向输出。您可以使用>
进行写入,使用>>
进行追加,也可以指示默认值为stdout
且2
代表stderr
的输出流。输出可以在任何地方发送,例如基本日志记录文件,或者如果根本不需要,可以通过将其发送到特殊设备/dev/null
来丢弃。
所以....提供的解决方案
php /home/myuserid/public_html/projects/jobs/index.php 2> /dev/null
运行您的脚本,同时丢弃发送到stderr
的错误,这些错误之前已被发送到错误的目的地并导致某些接收器丢失。
答案 1 :(得分:0)
您是否检查过脚本在cron之外是否正确执行? 在shell上运行相同的命令会发生什么?
答案 2 :(得分:0)
您必须确保服务器的SMTP服务器处于活动状态。此外,如果它说你有连接问题,那么你就像在;
这样的行上做错了$output = $string . " and " . $string;
或者像这样;
$output = "Hello";
$output .= " there!";
答案 3 :(得分:0)
运行cron的方法似乎是正确的。您的邮件发送一定有问题。您的服务器可能不支持使用mail()
功能。您可以使用PhpMailer来优先选择smtp邮件。
尝试设置标题:
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
mail($to, $subject, $message, $headers);
答案 4 :(得分:0)
我已经联系了我的托管服务提供商,他们已经将cron命令自己更改为php /home/myuserid/public_html/projects/jobs/index.php 2> /dev/null
,这就是诀窍。
@Matt Whipple建议部分修复(即在命令行中添加/dev/null
)。