在Laravel 5.4中更改FROM和REPLYTO地址

时间:2017-03-07 03:08:52

标签: laravel laravel-5 laravel-5.4

我无法使用用户地址发送电子邮件作为FROM和回复

在FormRequest中:

    public function persist()
{
    $reservation = Resa::create(
        $this->only(['nom', 'email', 'phone', 'formule', 'date_arr', 'date_ret', 'nb_adu', 'nb_enf', 'lemessage'])
    );
    Mail::to('contact@cotiga.fr')
    ->from($reservation->email, $reservation->nom)
    ->replyTo($reservation->email, $reservation->nom)
    ->send(new Reservation($reservation));

}

我有错误:

FatalThrowableError in ReservationForm.php line 48:
Call to undefined method Illuminate\Mail\PendingMail::from()

我尝试了充分的可能性,但我无法更改字段FROM和REPLYTO 你能帮助我吗 ? 感谢的

4 个答案:

答案 0 :(得分:9)

Mail Facade不再实施replyTo()方法。相反,此方法已移至Mailable类本身。官方文档建议使用build()方法来设置Mailable,但这并不总是方便的(例如,每次replyTo字段可能不同)

但是,如果您仍想使用类似的语法,可以使用:

$mailable = new myMailableClass;
$mailable->replyTo('reply@to.com');

Mail::to('email@tocom')
  ->send($mailable);

有关Mailable类的可用方法的完整列表,请参阅Mailable Documentation

答案 1 :(得分:4)

在Laravel 5.4 Mailables中,可以在replyTo方法的可邮寄内设置subjectccbccbuild和其他内容。对于to也是如此,它也可以在Mail门面上设置。

以下是使用属性数组的可联系表单的简单示例:

您可以直接在to外观上使用Mail静态方法,但作为示例,我们将在mailable中设置它:

Mail::send(new ContactCompany($attributes));

然后在replyTo方法中设置build

class ContactCompany extends Mailable
{
    use Queueable, SerializesModels;

    public $attributes;

    /**
     * Create a new message instance.
     *
     * @param $attributes
     */
    public function __construct($attributes)
    {
        $this->attributes = $attributes;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->to($this->attributes['departmentEmail'], config('app.name'));
        $this->replyTo($this->attributes['email'], $this->attributes['name']);
        $this->subject(sprintf("New contact message from %s", $this->attributes['name']));

        return $this->markdown('emails.contact.company');
    }
}

请注意,Mail::alwaysFrom()Mail::alwaysReplyTo()可以在Mail::send()之前用于设置 全部的fromreplyTo < / em> 电子邮件,因此请务必小心使用它们。

答案 2 :(得分:0)

现在发送电子邮件的首选方法是mailables,您可以设置并回复使用from()或replyTo()方法。

但是,如果使用普通Mail外墙,则应尝试使用alwaysFromalwaysReplyTo方法。但是,在发送此类电子邮件之后,您应该再次设置以前的值,以确保此更改不会影响其他电子邮件。

但是查看方法名称可能不是最好的解决方案,所以更好的方法是查看mailables并使用它们在最新的Laravel版本中发送电子邮件。

答案 3 :(得分:0)

问题已解决。 我编辑应用&gt;邮件&gt; Reservation.php

    public function build()
    {
//      return $this->markdown('emails.reservation-email');
        return $this->from($this->reservation->email)->markdown('emails.reservation-email');
    }

应用&GT;&的Http GT;请求&GT; ReservationForm.php

public function persist()
{
    $reservation = Resa::create(
        $this->only(['nom', 'email', 'phone', 'formule', 'date_arr', 'date_ret', 'nb_adu', 'nb_enf', 'lemessage'])
    );
    Mail::to('contact@cotiga.fr')->send(new Reservation($reservation));
}