Flarum的mail邮箱在PHP8+版本报错修复

发布于 2025-11-07 阅读 10 分类:技术文章

报错输出内容:

Deprecated: Callables of the form [“Swift_SmtpTransport”, “Swift_Transport_EsmtpTransport::__construct”] are deprecated in /www/wwwroot/XXX.com/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php on line 36

解决方案

进入目录/www/wwwroot/XXX.com/vendor/swiftmailer/swiftmailer/lib/classes/Swift/修改以下三个文件

Message.php

  \call_user_func_array(
            [$this, 'Swift_Mime_SimpleMessage::__construct'],
             Swift_DependencyContainer::getInstance()
                 ->createDependenciesFor('mime.message')
             );

修改为

$dependencies = Swift_DependencyContainer::getInstance()
->createDependenciesFor('mime.message');
parent::__construct(…$dependencies);

SmtpTransport.php

\call_user_func_array(
[$this, 'Swift_Transport_EsmtpTransport::__construct'],
 Swift_DependencyContainer::getInstance()
 ->createDependenciesFor('transport.smtp')
 );

修改为

  // 获取依赖项
    $dependencies = Swift_DependencyContainer::getInstance()
        ->createDependenciesFor('transport.smtp');

    // 使用展开操作符调用父类构造函数
    parent::__construct(...$dependencies);

SpoolTransport.php

  $arguments = Swift_DependencyContainer::getInstance()
             ->createDependenciesFor('transport.spool');

         $arguments[] = $spool;

         \call_user_func_array(
             [$this, 'Swift_Transport_SpoolTransport::__construct'],
             $arguments
         );

修改为

$arguments = Swift_DependencyContainer::getInstance()
            ->createDependenciesFor('transport.spool');
    

SwiftException.php

parent::__construct($message, $code, $previous);

修改为

parent::__construct($message, $code ?? 0, $previous);