0

我已经编写了一个 PHP 脚本,该脚本将一些内容发送到预定义的电子邮件地址,并希望设置一个每天运行该 PHP 脚本的 cron 作业。此外,我已将其设置为每次 cron 运行时也向我发送一封电子邮件。我应该提到,该脚本使用 PHPmail()函数以 html 格式发送电子邮件,并且我已经通过直接通过浏览器的地址栏访问来测试该脚本是否有效。

cron 命令: php /home/myuserid/public_html/projects/jobs/index.php

令人惊讶的是,当 cron 运行时,我通过电子邮件收到以下错误消息:

在 /usr/bin/sendmail 第 15 行的连接 (.) 或字符串中使用未初始化的值。内容类型:text/html

我什至不确定从哪里开始寻找问题,所以我需要问:我如何正确设置一个简单的 cron 作业,该作业运行一个使用该mail()函数发送电子邮件的 PHP 脚本?

4

4 回答 4

1

如果不查看脚本本身,很难准确地说出问题出在哪里,但根本问题是输出流被发送到错误的位置。在标准 POSIX 环境中,有 2 个标准输出流,标准输出 ( stdout) 和标准错误 ( stderr)。在 Web 浏览器中查看脚本时,stdout将传递给浏览器stderr并由 Apache 处理并通常发送到记录器。

从命令行调用时,情况有所不同:它们可能会打印到控制台(这是标准的stdout),但取决于脚本和 CLI 之类的东西php.ini。在您的情况下,引用 的行Content-Type表示输出被发送到错误的位置。您可以使用 shell(通常是 BASH)重定向来重定向输出。您使用>for write 和>>for append ,您还可以指示默认为stdout2表示的输出流stderr。输出可以发送到任何地方,例如基本日志文件,或者如果根本不需要它,可以通过将其发送到特殊设备来丢弃它/dev/null

所以....提供的解决方案

php /home/myuserid/public_html/projects/jobs/index.php 2> /dev/null

运行您的脚本,同时丢弃stderr之前发送到错误目的地并导致某些接收器抛出的错误。

于 2013-01-22T16:22:45.253 回答
0

我已经联系了我的托管服务提供商,他们已经将 cron 命令自己更改为php /home/myuserid/public_html/projects/jobs/index.php 2> /dev/null,这就成功了。@Matt Whipple 建议进行部分修复(即添加/dev/null到命令行)。

于 2013-01-28T08:19:26.093 回答
0

您必须确保您的服务器有一个活动的 SMTP 服务器。另外,如果它说您有连接问题,那么您做错了一些事情,例如;

$output = $string . " and " . $string;

或像这样;

$output = "Hello";
$output .= " there!";
于 2013-01-19T22:52:58.360 回答
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);
于 2013-01-19T22:54:58.333 回答