2017-01-16 7 views
0

제목을 사용하여 Mailable 클래스를 통해 전자 메일을 보낼 때 사용자 정의 smtp 사용. 사용자가 자신의 smtp를 정의하고 내 앱을 사용하여 고객에게 이메일을 보낼 수있는 앱을 만들려고합니다. Mailable 클래스가 사용할 SMTP 정보를 수동으로 어떻게 변경할 수 있습니까?Laravel 5.3

메시지 대기열도 중요하므로 Mailable 클래스가 smtp 정보를 가지고 있어야합니다.

내가 생각할 수있는 하나의 솔루션은 EMail 모델을 만들고 smtp 설정을 포함하여 전자 메일을 사용자에게 보내는 데 필요한 모든 데이터를 저장하는 것입니다. 그런 다음이 모델을 검색하는 대기열에있는 작업을 만들 수 있으며 전자 메일 개체에 대한 메서드 만 호출합니다. 그 메서드를 뉴스 mailable 클래스를 보내십시오 Config :: set() smtp 구성 설정하고 보냅니다.

그것은 작동합니까 또는 내 생각에 결함이 ...

답변

0

당신이 \Illuminate\Mail\TransportManager 클래스를 살펴 경우, createSmtpDriver() 방법, 당신은 SMTP 설정이 설정에서 당겨 곳 찾을 수 있습니다. 귀하의 설정에서 드라이버를 smtp으로 설정하면 Laravel이이 메소드를 호출합니다.

Laravel Mailer 클래스에는 Swift Mailer 인스턴스를 설정하는 public 메서드가 포함되어 있습니다. 그래서 당신은 기본적으로 (나는이 테스트를하지 않은 경우) 자신의 인스턴스를 생성하고 당신이 당신의 메시지를 보내기 전에 통해 그것을 전달할 수 :

public function yourMethod(Mailer $mailer) 
{ 
    $transport = Swift_SmtpTransport::newInstance(
     'YourHost', 'YourPort' 
    ); 
    $transport->setUsername('YourPassword'); 
    $transport->setPassword('YourPassword'); 
    $swift = new Swift_Mailer($transport); 

    $mailer->setSwiftMailer($swift); 

    $mailer->send(...); 
} 

을 일반적으로, 당신은 메일러 같은 Laravel 클래스로 일부 사용자 지정 기능을 도입 할 경우, 당신은 당신 자신의 드라이버를 정의 할 수 있고 (이 경우 당신 자신의 전송), Laravel의 API를 사용하여 그것을 확장하고 메일을 보내는 방법을 추가 할 수 있습니다.

다시 테스트했지만 아직 TransportManager 클래스를 확장하여 자신의 드라이버를 추가 할 수 있습니다. 다음 코드에 AppServiceProvider 코드를 넣을 수 있습니다.

$manager = app('swift.transport'); // Will get you an instance of TransportManager 
$manager->extend('customsmtp', function() { 
    // Your custom code to create your own transport for the mailer. Just like the createSmtpDriver method in TransportManager. 
    $transport = Swift_SmtpTransport::newInstance(
     'YourHost', 'YourPort' 
    ); 
    $transport->setUsername('YourPassword'); 
    $transport->setPassword('YourPassword'); 

    return $transport; 
}); 
+0

감사합니다. – user1365447