在Laravel 5.4中更改发件人和回复地址

7

我无法使用用户地址作为FROM和Reply To发送电子邮件。

在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));

}

I have the error :

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

我尝试了很多可能性,但是我无法更改“FROM”和“REPLYTO”字段。你能帮我吗? 谢谢

4个回答

10

Mail门面不再实现replyTo()方法。相反,此方法已经移到Mailable类本身中。官方文档建议使用build()方法设置可邮寄的内容,但这并不总是方便(例如,每次replyTo字段可能都不同)。

但是,如果仍希望使用类似的语法,则可以使用:

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

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

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


7
在 Laravel 5.4 中的可邮寄类(Mailables)中,可以在 build 方法中设置 replyTosubjectccbcc 等等。同样,也可以在 Mail 门面上设置 to。以下是一个使用属性数组的联系表单可邮寄类的简单示例:
您可以直接在 Mail 门面上使用 to 静态方法,但作为示例,我们将在可邮寄类中进行设置。
Mail::send(new ContactCompany($attributes));

然后在build方法内设置replyTo
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,因此请确保小心使用。

当您在build方法内设置replyTosubject等时,您将无法测试这些值是否已设置(模拟电子邮件上从未调用build方法)。最好将其移至构造函数。 - Amade

0

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

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

但是,从方法名称来看,这可能不是最佳解决方案,因此最好查看可发送电子邮件并在最新的Laravel版本中使用它们来发送电子邮件。


0
问题已解决。 我编辑了应用程序>邮件>预订.php。
    public function build()
    {
//      return $this->markdown('emails.reservation-email');
        return $this->from($this->reservation->email)->markdown('emails.reservation-email');
    }

app>Http>Request>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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接