2017-01-16 21 views
0

でMailableクラスを使用して電子メールを送信するときに、ユーザ定義のsmtpを使用しています。私は自分のsmtpを定義して自分のクライアントに自分のアプリを使って電子メールを送ることができるアプリケーションを作成しようとしています。 Mailableクラスが使用するsmtp情報を手動で変更する方法はありますか?Laravel 5.3

メッセージのキューイングも重要なので、Mailableクラスはsmtp情報を持っているはずです。

私が考えることができる1つの解決策は、EMailモデルを作成し、smtp設定を含む電子メールをユーザーからデータベースに送信するために必要なすべてのデータを保存することです。次に、私はこのモデルを取得し、電子メールオブジェクトのメソッドを送信するだけを呼び出すキュージョブを作ることができます。それは、メソッドのニュースmailableクラスを送信し、Config :: set()とsmtpの設定を設定し、それを送信します。

それが仕事や私の考えは欠陥があるのでしょう...

答えて

0

あなたは\Illuminate\Mail\TransportManagerクラスを見てみた場合、SMTP設定が設定からに引っ張られる場合、createSmtpDriver()方法では、あなたは見つけるでしょう。あなたの設定で、あなたのドライバがsmtpに設定されている場合、Laravelはこのメソッドを呼び出します。

Laravel Mailerクラスには、Swift Mailerインスタンスを設定するパブリックメソッドが含まれています。だから、基本的に(私はこれをテストしていない)独自のインスタンスを作成し、あなたのメッセージを送信する前にそれを通過できます。

通常
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