2017-04-24 4 views
1

laravelでメールを送ろうとしています。何らかの理由で、私はsendメソッドを呼び出す前にccを設定したい:Laravelで `to`メソッドなしでメールを送信する

Mail::cc($cc_mail)->send(new MyMailAlert()); 

それから私は私のMailableクラスのbuild方法で直接受信者(to)を定義します。

$this->subject($subject)->to($to_email)->view('my-mail'); 

しかし、それは失敗する:

私はどのように受信者を知らずにメールを送信することができますbuildメソッド?言い換えれば、私は受信者を(buildの方法で)直接設定したいのですが、これを行う方法はわかりません。ここで

+0

これを行う理由は何ですか? 'build'メソッドの意味は何ですか? – imrealashu

+0

@imrealashu私のmailableクラスのビルドメソッド:https://laravel.com/docs/5.4/mail#generating-mailables理由は、私のmailableクラスでいくつかのことをする前に受信者を知らない –

答えて

0

ccLaravel Docsに記載されていますが、Laravel API Documentationではなく、Illuminate\Mail\Mailerソースコード内のメソッドまたはプロパティを見つけることができません。だからあなたはこのように使うことはできません。

Illuminate\Mail\Mailableccです。お使いのコントローラで

MyMailAlert.php

class MyMailAlert extends Mailable implements ShouldQueue 
{ 
    use Queueable, SerializesModels; 

    /** 
    * Create a new message instance. 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Build the message. 
    * 
    * @return $this 
    */ 
    public function build() 
    { 
     return $this->subject($this->subject)->to($this->to)->view('my-mail'); 
    } 
} 

:あなたが送信する前にccを追加し、ビルド方法にtoを追加したいのであれば、あなたはこのようなものが必要

$myMailAlert = new MyMailAlert(); 
$myMailAlert->cc = $cc_mail; 

// At this point you have cc already setted. 

Mail::send($myMailAlert); // Here you sends the mail 

ビルドメソッドでは、subjecttoのmailableインスタンスのプロパティが使用されるため、送信前に設定する必要があることに注意してください。

私はあなたのビルド方法の例では、あなたの$subject$to_emailを取得しているところからわからないんだけど、私の例のために、あなたは$myMailAlert->subject$myMailAlert->toにこれらの値を与える必要があります。カスタム変数はビルドメソッドで使用できますが、クラスには既にこれらのプロパティがあるため、カスタム変数は必要ありません。

0

は、この問題に対処するためのハックです:

Mail::to([])->cc($cc_mail)->send(new MyMailAlert()); 

だから、空の配列でto()メソッドを追加し、それが動作します。それはまだハックです、私はそれが将来的にはうまくいくとは思っていません。

関連する問題