Php Laravel Mail/Swift/如何全局配置“;“发件人”;住址
Laravel提供了配置Php Laravel Mail/Swift/如何全局配置“;“发件人”;住址,php,email,laravel-5,sendmail,swiftmailer,Php,Email,Laravel 5,Sendmail,Swiftmailer,Laravel提供了配置mail.from以允许指定全局/默认from地址。这将在Swift邮件内部调用setFrom,并设置收件人电子邮件客户端中显示的“Header From”。 但是,由于没有设置其他选项(发送方/返回路径),因此消息也会随此值的返回路径/信封发件人一起发送,因为它从该值派生 该站点运行在一个多项目主机上,Exim4在本地运行,因此设置这些地址没有任何限制,就像我使用Gmail SMTP一样。 Laravel配置为使用sendmail 让我们假设机器主机名为webX.hos
mail.from
以允许指定全局/默认from
地址。这将在Swift邮件内部调用setFrom
,并设置收件人电子邮件客户端中显示的“Header From”。
但是,由于没有设置其他选项(发送方/返回路径),因此消息也会随此值的返回路径/信封发件人一起发送,因为它从该值派生
该站点运行在一个多项目主机上,Exim4在本地运行,因此设置这些地址没有任何限制,就像我使用Gmail SMTP一样。
Laravel配置为使用sendmail
让我们假设机器主机名为webX.hosts.our company intern.com
,在其上运行的项目属于customer brand.com
的子域。电子邮件应该从“主域”(不包括子域部分)发送,就像noreply@customer-brand.com
customer brand.com。
无法解析子域项目所在的计算机
我想用实际主机名的信封地址发送邮件(更好:保留Exim/Sendmail使用的默认信封/返回路径),如appname@webX.hosts.our-company intern.com
,并且只有来自以下网站的:noreply@customer-brand.com
原因是,我希望有一个有效的返回路径,指示它实际上来自哪个主机。
SPF也是一个原因,但不是主要原因;我们控制customer brand.com
域,只需添加我们的主机地址,如果可能的话,我仍然希望避免添加,并使用我们的域,该域中已经有所有主机的SPF记录
当我将以下行放入
这会产生我想要的结果,但我当然不能只在供应商代码中编辑它。
在哪里可以正确配置(可能通过对每条消息执行的回调)?或者没有这样的选项,我应该在Laravel/Mail包中写一个问题?
我还尝试在sendmail命令中添加-f
:
/usr/sbin/sendmail-bs-f”appname@webX.hosts.our-公司实习生网站“
-但是,这在\u establishProcessConnection()
上已经失败。在CLI中调用,错误为:
exim:不兼容的命令行选项或参数
版本:
- 拉威尔5.4.36
- Swiftmailer 5.4.9
- Exim 4.89-2+deb9u2
mail.php
:
'from' => [
'address' => 'noreply@customer-brand.com',
'name' => 'Customer Brand',
],
Tinker外壳测试代码:
Mail::raw('Text to e-mail', function($message) {
$message->to('my-personal-email-for-testing@domain.com');
})
当前邮件标题:
收到:来自webX.hosts.our-company-intern.com(xxx.xxx.xxx.xxx)的。。。
收到:来自appname(helo=[127.0.0.1])
通过webX.hosts.our-company-intern.com和本地smtp(Exim 4.89)
(信封从)//这应该更改
...
发件人:客户品牌
返回路径:noreply@customer-brand.com//这应该会改变
如作者所述
在我的头顶上:你可以钩住照亮\Mail\Events\MessageSending
事件并将发送者添加到那里
考虑到公司的环境,我假设你知道如何(如果不知道,请告诉我)。在这种情况下,以下是您需要的侦听器:
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');
}
}
我认为这个答案不适用于这个问题。您从
调用,这导致了相同的问题,我没有看到设置“信封发送者”的代码。链接教程只是一个初学者如何发送电子邮件的解释。当我扫描邮件类代码时,似乎错过了那个事件。正是我想要的,谢谢!
<?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',
]);
}
}
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');
}
}