Laravel 邮件中的“回复”字段不起作用

Posted

技术标签:

【中文标题】Laravel 邮件中的“回复”字段不起作用【英文标题】:"Reply-to" field in Laravel mail is not working 【发布时间】:2014-03-05 04:55:04 【问题描述】:

我需要帮助来弄清楚如何在app/config/mail.php 中设置reply-to 字段。我正在使用 Laravel 4,但它不起作用。这是我的app/config/mail.php

<?php

return array(
    'driver' => 'smtp',
    'host' => 'smtp.gmail.com',
    'port' => 587,
    'from' => [
        'address' => 'sender@domain.com',
        'name' => 'E-mail 1'
    ],
    'reply-to' => [
        'address' => 'replyto@domain.com',
        'name' => 'E-mail 2'
    ],
    'encryption' => 'tls',
    'username' => 'sender@domain.com',
    'password' => 'pwd',
    'pretend' => false,
);

【问题讨论】:

我在 swiftmailer 文档中搜索它,但没有找到关于“回复”字段的任何信息。 将其更改为 reply_to 并且应该从 5.4+ 开始工作 【参考方案1】:

很确定它不会以这种方式工作。您可以在配置文件中设置“From”标头,但在发送过程中会传递其他所有内容:

Mail::send('emails.welcome', $data, function($message)

    $message->to('foo@example.com', 'John Smith')
        ->replyTo('reply@example.com', 'Reply Guy')
        ->subject('Welcome!');
);

FWIW,传递给回调的$messageIlluminate\Mail\Message 的一个实例,所以你可以调用它的各种方法:

->来自($address, $name = null) ->发件人($address, $name = null) ->returnPath($address) ->to($address, $name = null) ->cc($address, $name = null) ->bcc($address, $name = null) ->replyTo($address, $name = null) ->主题($主题) ->优先级($level) ->attach($file, array $options = array()) ->attachData($data, $name, array $options = array()) ->嵌入($file) ->embedData($data, $name, $contentType = null)

另外,还有一个神奇的 __call 方法,因此您可以运行通常在底层 SwiftMailer 类上运行的任何方法。

【讨论】:

这太可悲了!回复是这样一个基本信息,可以在mail.php conig文件中设置。 对不起,我没听懂你的遗言。 __call 方法对我有什么用处? __call() 的好处只是意味着,如果 SwiftMailer 类的方法没有被 Laravel 包装(即不在上面的列表中),你仍然可以使用它。例如,addTextHeader() 我不明白。我如何回复特定的对话或话题。是否有某种消息/对话/线程 ID 来链接它? Reply-To 标头指定回复邮件时使用的电子邮件地址。 In-Reply-To 和/或References 标头应该与原始邮件的Message-Id 标头具有相同的值,这就是邮件客户端知道将对话分组到一个线程中的方式。见tools.ietf.org/html/rfc2822#section-3.6.4 和cr.yp.to/immhf/thread.html【参考方案2】:

从 Laravel 5.3 开始可以添加全局回复。在您的 config/mail.php 文件中添加以下内容:

'reply_to' => [
    'address' => 'info@xxxxx.com',
    'name' => 'Reply to name',
],

【讨论】:

这个答案是正确的,即使在 Laravel 5.4 中也能正常工作。我认为它可以标记为这个问题的正确答案。由于最近的版本和.env文件中引入了env()功能,所以也可以适当使用。 'reply_to' =&gt; [ 'address' =&gt; env('MAIL_REPLY_ADDRESS', 'email@domain.com'), 'name' =&gt; env('MAIL_REPLY_NAME', 'Reply Name'), ],这个答案很好用。 对我来说它不起作用,因为我使用了相同的回复地址地址作为收件箱地址。在这种情况下,当您点击回复时,Thunderbird 会忽略回复地址。 DOH! 像魅力一样工作!谢谢你:)【参考方案3】:

我正在使用 mailable 并在我的 App\Mail\NewUserRegistered::class 上的构建函数中执行此操作,

public function build()
    
        return $this->replyTo('email', $name = 'name')
                ->markdown('emails.admin_suggestion');
    

【讨论】:

【参考方案4】:

另一种选择是自定义 SwiftMailer 消息 - https://laravel.com/docs/8.x/mail#customizing-the-swiftmailer-message。

->withSwiftMessage(function ($message) use ($senderEmail) 
    $message->getHeaders()
        ->addTextHeader('Return-Path', $senderEmail);
)

【讨论】:

以上是关于Laravel 邮件中的“回复”字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel - 发送邮件不起作用

Laravel 默认邮件不起作用

Laravel 中的注册和登录表单不起作用

laravel 中的表单提交不起作用并显示令牌不匹配异常

Laravel Nova Actions BelongsTo 字段不起作用

注册在 Laravel 5 中不起作用