2017-04-09 53 views
0

不久前,我開始接受這個奇怪的錯誤,在我的Laravel應用郵件發送,錯誤是:Laravel郵寄錯誤

ErrorException in EsmtpTransport.php line 55: 
Argument 1 passed to Swift_Transport_EsmtpTransport::__construct() must implement interface Swift_Transport_IoBuffer, none given 

有趣的是,我的郵件系統工作就好了大約一年,什麼事都沒有已經更新(只是服務器和域名在幾周前再次付款),所以我認爲代碼不是問題,我在郵件認證系統中加倍檢查了信息,這些都是正確的。

我跟着異常堆棧跟蹤,並發現Swift_SmtpTransport::__construct()參數正確發送,但是從那裏Swift_EsmtpTransport::__construct()被稱爲不帶參數(這實際上是錯誤顯示)

而且我更新了我所有的庫(與「作曲家更新「命令)。我不知道有什麼可以是錯誤的,並不能找到任何在線幫助,所以任何幫助將是巨大的

當前版本是:

  • 「laravel /框架」:「5.2 *」從 「laravel /框架/ composer.json」

--- 「〜5.1」(更新後v5.4.6)//:從 「composer.json」

  • 「swiftmailer/swiftmailer」 //編輯 ---
    我在某處發現這是某種形式加載(依賴注入)的問題,所以我執行這行代碼:

    var_dump(Swift_DependencyContainer::getInstance()->createDependenciesFor('transport.smtp')); 
    

    ,並得到這個作爲結果array(0) { }

  • 回答

    0

    如果有人有興趣,我找到答案(有朋友幫忙)。問題是與PHP版本不兼容,顯然SwiftMailer庫不適用於較新版本的PHP(> 5.5.9,可能只有很少的版本,不知道從哪個版本開始失敗)。

    失敗是由於某些自動加載衝突。解決這個問題的方法是從懶加載恢復到預加載,這會減慢一點響應時間,但在大多數情況下,您甚至不會注意到(在我的情況下,我沒有看到任何性能下降)。

    具體的解決方案:
    查找%APP%/供應商/ swiftmailer/swiftmailer/lib中/ swift_requied.php,並改變它看起來像這樣

    <?php 
    
    /* 
    * This file is part of SwiftMailer. 
    * (c) 2004-2009 Chris Corbyn 
    * 
    * For the full copyright and license information, please view the LICENSE 
    * file that was distributed with this source code. 
    */ 
    
    /* 
    * Autoloader and dependency injection initialization for Swift Mailer. 
    */ 
    
    if (class_exists('Swift', false)) { 
        return; 
    } 
    
    // Load Swift utility class 
    require __DIR__.'/classes/Swift.php'; 
    
    if (!function_exists('_swiftmailer_init')) { 
        function _swiftmailer_init() 
        { 
         require __DIR__.'/swift_init.php'; 
        } 
    } 
    
    // Start the autoloader and lazy-load the init script to set up dependency injection 
    // Swift::registerAutoload('_swiftmailer_init'); 
    
    _swiftmailer_init(); 
    

    的區別是在最後一行,Swift::registerAutoload('_swiftmailer_init');被註釋掉出來,並且直接調用_swiftmailer_init方法。

    希望這可以幫助別人,因爲我失去了大約2天試圖解決這個問題。