Laravel提供配置mail.from
,以允许指定全局/默认From
地址。这会在内部调用Swift-Message上的setFrom
,并设置显示在收件人电子邮件客户端中的“ Header From ”。
但是,由于getReversePath
,此消息还随此值的 Return-Path / Envelope-From 发送,这使得该 From 值与其他值无关选项(发件人/返回路径)已设置。
该站点在本地运行Exim4的多项目主机上运行,因此设置这些地址没有限制,就像我使用的是Gmail SMTP一样。
Laravel配置为使用sendmail
。
让我们假设计算机的主机名是webX.hosts.our-company-intern.com
,并且在其上运行的项目属于customer-brand.com
的子域。但是,电子邮件应从“主域”发送(不包括子域部分),例如noreply@customer-brand.com
。 customer-brand.com.
不能解析托管子域项目的计算机。
我想使用实际主机名的信封地址发送邮件(更好:保留默认的 Envelope-From / Return-Path Exim / Sendmail会使用),例如{{1} },并且只有appname@webX.hosts.our-company-intern.com
。
原因是,我想要一个有效的 Return-Path 来指示它实际来自哪个主机。
SPF也是原因,但不是主要原因。我们控制着From: noreply@customer-brand.com
域,可以只添加我们的主机地址,如果可能的话,我仍然想避免使用它,而使用已经在其SPF记录中包含所有主机的域。
当我将以下行放入Laravel vendor class-method Mailer::send
时:
customer-brand.com
这会产生我想要的结果,但是我当然不能只在供应商代码中对其进行编辑。 该在哪里正确配置(也许通过对每条消息执行的回调)?还是没有这样的选择,我应该在Laravel / Mail包中写一个问题?
我还尝试将$message->sender('appname@webX.hosts.our-company-intern.com');
放在sendmail命令中:
-f
-但是,这在/usr/sbin/sendmail -bs -f"appname@webX.hosts.our-company-intern.com"
处已经失败。在CLI中调用该错误是:
exim:不兼容的命令行选项或参数
版本:
配置_establishProcessConnection()
:
mail.php
Tinker-Shell测试代码:
'from' => [
'address' => 'noreply@customer-brand.com',
'name' => 'Customer Brand',
],
当前邮件标题:
Mail::raw('Text to e-mail', function($message) {
$message->to('my-personal-email-for-testing@domain.com');
})
答案 0 :(得分:3)
在我的头上:您可以挂入Illuminate\Mail\Events\MessageSending
事件,然后在其中添加发件人。
鉴于公司环境,我假设您知道如何listen to events(如果没有,请告诉我)。在这种情况下,这是您需要的监听器:
class MessageSendingListener
{
/**
* Handle the event.
*
* @param \Illuminate\Mail\Events\MessageSending $event
* @return void
*/
public function handle(MessageSending $event)
{
// $event->message is of type \Swift_Message
// So you'll need the setSender() method here.
$event->message->setSender('appname@webX.hosts.our-company-intern.com');
}
}
答案 1 :(得分:0)
由Sajal Soni撰写
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class DemoEmail extends Mailable
{
use Queueable, SerializesModels;
/**
* The demo object instance.
*
* @var Demo
*/
public $demo;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($demo)
{
$this->demo = $demo;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('sender@example.com')
->view('mails.demo')
->text('mails.demo_plain')
->with(
[
'testVarOne' => '1',
'testVarTwo' => '2',
])
->attach(public_path('/images').'/demo.jpg', [
'as' => 'demo.jpg',
'mime' => 'image/jpeg',
]);
}
}
我希望这会对您有所帮助