在Laravel中发送没有`to`方法的邮件

时间:2017-04-24 08:43:58

标签: php laravel laravel-5 laravel-5.4 laravel-mail

我想通过laravel发送邮件。出于某种原因,我只想在调用import '../imports/api/tasks.js'; 方法之前设置cc

send

然后我直接在我的Mailable类的Mail::cc($cc_mail)->send(new MyMailAlert()); 方法中定义收件人(to):

build

但它失败了:

  

Symfony \ Component \ Debug \ Exception \ FatalThrowableError:调用未定义的方法Illuminate \ Mail \ Mailer :: cc()

在使用$this->subject($subject)->to($to_email)->view('my-mail'); 方法发送邮件之前,如何在不知道收件人的情况下发送邮件?换句话说,我想直接在build方法中设置收件人(至),我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:2)

这是一个解决这个问题的黑客:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<td>
  <p id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_P1" class="content-card-entry fcb-row fcb-clear">
    <span class="content-card-entry-value fcb-gr-3 fcb-gr-3@small">
                                            <span id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_Label1">101</span>
    </span>
    <span class="content-card-entry-value fcb-gr-3 fcb-gr-3@small">
                                            <span id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_Label2">16</span>
    </span>
    <span class="content-card-entry-value fcb-gr-3 fcb-gr-3@small">
                                            <span id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_Label3">21</span>
    </span>
    <span class="content-card-entry-value fcb-gr-3 fcb-gr-3@small">
                                            <span id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_Label4">70,00 €</span>
    </span>
  </p>
  <p id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_P5" class="content-card-entry fcb-row fcb-clear" style="text-align:right;">
    <span class="content-card-entry-value fcb-gr-12 fcb-gr-12@small">
                                                <a id="ctl00_ContentMiddle_TicketList1_GridView1_ctl03_LinkButton1" class="button small cart-buttons-second-button" Autopostback="false" href="javascript:__doPostBack(&#39;ctl00$ContentMiddle$TicketList1$GridView1$ctl03$LinkButton1&#39;,&#39;&#39;)">In den&nbsp;Warenkorb</a>
                                            </span>
  </p>
  <hr />
</td>

所以只需添加一个带有空数组的Mail::to([])->cc($cc_mail)->send(new MyMailAlert()); 方法即可。它仍然是一个黑客,我不确定它将来会起作用。

答案 1 :(得分:1)

Laravel Docs中记录了

cc,但我在Illuminate\Mail\Mailer源代码中找不到方法或属性,Laravel API Documentation中也没有。所以你不能这样使用它。

Illuminate\Mail\Mailable具有cc属性。因此,如果您想在发送之前添加cc并在构建方法中添加to,则需要以下内容:

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');
    }
}

在您的控制器中:

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

// At this point you have cc already setted.

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

请注意,构建方法使用可邮寄实例的subjectto属性,因此您必须在发送之前进行设置。

我不确定您在构建方法示例中从哪里检索$subject$to_email,但对于我的示例,您必须将这些值提供给$myMailAlert->subject和{{ 1}}。您可以在构建方法中使用自定义变量,但假定该类已具有这些属性,则不需要自定义变量。