0

事前定義された電子メールアドレスにコンテンツを送信するPHPスクリプトをまとめ、そのPHPスクリプトを毎日実行するcronジョブを設定したいと思いました。さらに、cronが実行されるたびにメールを送信するように設定しました。このスクリプトはPHPmail()関数を使用してHTML形式で電子メールを送信し、ブラウザーのアドレスバーから直接アクセスしてスクリプトが機能するかどうかをテストしたことを述べておく必要があります。

cronコマンド: php /home/myuserid/public_html/projects/jobs/index.php

驚いたことに、cronが実行されたとき、次のエラーメッセージを電子メールで受け取りました。

/ usr / bin / sendmail行15の連結(。)または文字列での初期化されていない値の使用。コンテンツタイプ:text / html

問題をどこから探し始めるかさえわからないので、質問する必要がありますmail()。関数を使用して電子メールを送信するPHPスクリプトを実行する単純なcronジョブを正しく設定するにはどうすればよいですか。

4

4 に答える 4

1

スクリプト自体を見ずに問題が何であるかを正確に言うことは困難ですが、根本的な問題は、出力ストリームが間違った場所に送信されていたことでした。stdout標準のPOSIX環境には、標準出力( )と標準エラー( )の2つの標準出力ストリームがありますstderr。スクリプトをWebブラウザーで表示stdoutすると、ブラウザーに渡され、stderrApacheによって処理され、通常はロガーに送信されます。

コマンドラインから呼び出す場合、これは異なります。コンソール(標準stdout)に出力することが期待できますが、スクリプトやCLIなどに依存しますphp.ini。あなたの場合、を参照している行Content-Typeは、出力が間違った場所に送信されていることを示しています。シェル(通常はBASH)リダイレクトを使用して出力をリダイレクトできます。>書き込みと>>追加に使用します。また、デフォルトがstdoutであり、を2表す出力ストリームを指定することもできますstderr。出力は、基本的なログファイルなど、どこにでも送信できます。まったく必要ない場合は、特別なデバイスに送信して破棄できます/dev/null

だから....提供されたソリューション

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

以前に間違った宛先に送信されていた送信済みエラーを破棄stderrし、一部の受信者をスローさせながら、スクリプトを実行します。

于 2013-01-22T16:22:45.253 に答える
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 に答える
0

私はホスティングプロバイダーに連絡しましたが、彼らはcronコマンド自体をに変更しましたphp /home/myuserid/public_html/projects/jobs/index.php 2> /dev/null。これでうまくいきました。@Matt Whippleは、部分的な修正(つまり/dev/null、コマンドラインへの追加)を提案しました。

于 2013-01-28T08:19:26.093 に答える