11

PHP 和Swiftmailer的新手,还没有开始工作。我已经从 Hostgator 将 /lib/ 目录上传到了我的共享网络服务器的根目录中。我在 /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 我没有权限。想知道我还能在哪里找到错误以修复它?

4

3 回答 3

17

您应该尝试使用 swiftmailer logger 插件

Logger 插件有助于在发送过程中进行调试。它可以帮助确定 SMTP 服务器拒绝地址的原因,或可能出现的任何其他难以发现的问题。

您只需要创建新的 logger 实例并使用 registerPlugin() 方法将其添加到 mailer 对象。

<?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:将输出实时打印到屏幕上。对于非常基本的调试输出非常方便。

于 2015-08-13T06:54:53.493 回答
7

像这样使用传输异常处理:

    try {
        $mailer->send($message);
    }
    catch (\Swift_TransportException $e) {
        echo $e->getMessage();
    }
于 2017-02-14T08:48:23.473 回答
4

在您的 swift mailer 扩展下,有一个异常处理程序。

根/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);
    }
}
于 2015-07-13T14:09:40.260 回答