web-dev-qa-db-ja.com

Swiftメーラー-メールを送信できず、エラーログを見つけることができません

PHP and Swiftmailer の新機能で、まだ機能していません。/lib /ディレクトリをHostgatorから共有ウェブサーバーのルートにあるディレクトリにアップロードしました。 。/lib/の上のディレクトリに次のものをアップロードしました。

<?php
        require_once 'lib/Swift_required.php';

$transport = Swift_SmtpTransport::newInstance('mail.****.com', 25)
    ->setUsername('****@****.com')
    ->setPassword('****');

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('Subject Here')
    ->setFrom(array('****@****.com' => '****'))
    ->setTo(array('****@****.com' => '****'));

    $message->setBody('This is the message');

    if (!$mailer->send($message, $errors))
    {
        echo "Error:";
        print_r($errors);
    }
?>

メッセージは送信されませんが、エラーログを表示することもできません。 php.iniのすべてのセクションでエラーログを有効にしていますが、ブラウザで.phpファイルをアップロードした場所に移動しようとすると、404エラーが発生します。 ssh経由で接続すると、ジェイルシェルにアクセスできます。 /var/log/php-scripts.logにアクセスしようとしたとき、権限がありませんでした。それを修正するために、他にどこでこれのエラーを見つけることができるのだろうか?

10
d.h276

Swiftmailer ロガープラグイン を使用してみてください。

Loggerプラグインは、送信プロセス中のデバッグに役立ちます。 SMTPサーバーがアドレスを拒否している理由、または発生する可能性のあるその他の見つけにくい問題を特定するのに役立ちます。

新しいロガーインスタンスを作成し、registerPlugin()メソッドを使用してメーラーオブジェクトに追加するだけです。

<?php
require_once 'lib/Swift_required.php'; 
$transport = Swift_SmtpTransport::newInstance('mail.****.com', 25)
    ->setUsername('****@****.com')
    ->setPassword('****');

$mailer = Swift_Mailer::newInstance($transport);
$logger = new \Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));

$message = Swift_Message::newInstance('Subject Here')
    ->setFrom(array('****@****.com' => '****'))
    ->setTo(array('****@****.com' => '****'));

    $message->setBody('This is the message');

    if (!$mailer->send($message, $errors)) {
        // Dump the log contents
        // NOTE: The EchoLogger dumps in realtime so dump() does nothing for it. We use ArrayLogger instead.
        echo "Error:" . $logger->dump();
    }else{
        echo "Successfull.";
    }
?>

編集:

Swift_Plugins_Loggers_ArrayLogger:ログメッセージのコレクションを配列内に保持します。配列の内容をクリアするか、画面にダンプすることができます。

Swift_Plugins_Loggers_EchoLogger:出力を画面にリアルタイムで出力します。非常に初歩的なデバッグ出力に便利です。

13
cyb0k

次のようなトランスポート例外処理を使用します。

    try {
        $mailer->send($message);
    }
    catch (\Swift_TransportException $e) {
        echo $e->getMessage();
    }
5
kjdion84

Swiftメーラー拡張機能の下に、例外ハンドラーがあります。

root/lib/classes/Swift/SwiftException.php

デフォルトでは、エラーを伴う複雑な処理を実行して、それらを見つけるのを非常に困難にします。そこにあるほとんどのページでも、エラーをログに記録するための同様に複雑な方法を推奨しています。

エラーを確認したいだけの場合は、以下のようにエコーを追加します(またはそれを使ってやりたいことは何でも)。

class Swift_SwiftException extends Exception
{

    /**
     * Create a new SwiftException with $message.
     *
     * @param string $message
     */
    public function __construct($message)
    {
        echo $message;
        parent::__construct($message);
    }
}
3
Jeff Davis