0

cronジョブになるphpスクリプトがあり、使用している電子メールスクリプトを追加するまでは正常に機能していました。

以前にサイト全体で電子メールスクリプトを使用しましたが、コマンドラインからそれを使用して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;

        }

?>

include send_mail.phpをコメントアウトすると、正常に機能しますが、電子メールは送信されません。

何か案は?

4

4 に答える 4

1

cronスクリプトをから実行するときに、をロードできるように、適切な作業フォルダーが設定されていることを確認する必要がありますmail.phpgetcwd()と関数の使用は、chdir()使用する必要がある2つです。

通常、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

コマンドラインから「locateMail.php」を試してから、require_onceでこのスクリプトのフルパスを試してください

また、cronを介して実行された場合は、応答をログファイルにダンプしてみてください。

cronジョブログ-ログに記録する方法は?

于 2012-07-05T17:14:09.587 に答える