2017-04-09 7 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 *" // "composer.json"
  • "swiftmailer/swiftmailer"에서 "~ 5.1"(갱신 후 v5.4.6) // "laravel/프레임 워크/composer.json"

--- 에서 ---
내가 어딘가에서 발견되었습니다. 친구의 도움으로 (

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');는 주석, 마지막 줄에 out이고, _swiftmailer_init 메서드가 직접 호출됩니다.

이 문제를 해결하기 위해 약 2 일을 잃어 버렸기 때문에 이것이 도움이되기를 바랍니다.