如何在 Laravel 5.env 文件中设置多个发送地址?
How can I set multiple sending addresses in Laravel 5 .env file?
我一直在搜索,我检查了 Laravel 5 文档,但我没有找到任何东西。在 Laravel .env 示例文件中,它显示了如何将其设置为从一个电子邮件地址发送,但假设我想在不同情况下从不同的电子邮件地址发送,如何我会那样做吗?
.env
文件只是为您的应用程序设置值的一种方式。您可以(在一定范围内 - 请参阅 this answer 进行讨论)随意调用这些值。所以如果你想在你的环境中为不同的事件设置多个电子邮件地址,你可以在你的 .env
文件中做这样的事情:
MAIL_ONLOGIN=larry@example.com
MAIL_ONSIGNUP=moe@example.com
MAIL_ONERROR=curly@example.com
然后,在您应用程序的事件处理程序中(或您需要的任何地方),只需像这样访问适当的电子邮件地址:
// time to inform someone of a catastrophic error
Mail::send(
'emails.error',
['error' => $exception],
function ($m) use ($exception) {
$m->to(env('MAIL_ONERROR'))
->subject('Something broke! ' . $exception->getMessage());
});
我还应该提到 .env
文件旨在供开发使用 - 当需要将您的应用程序部署到生产环境时,删除 .env
文件并使用 "real" 服务器上用于这些值的环境变量。
在 Laravel 中没有 "default" 定义发件人地址集的方法,尽管您可以实现它。
以下是在 Laravel 中发送电子邮件时使用 "From" 的工作原理:
- 如果您在
config/mail.php
文件的 from
配置中设置了 null
以外的任何内容。
- 然后
MailServiceProvider
会在设置邮件对象时调用Mailer
方法alwaysFrom
。
- 如果
alwaysFrom
设置了地址,则每次发送电子邮件时都会使用该地址作为发件人地址。
不设置它的问题是在您无法控制发件人地址的情况下,您将没有 "default" 发件人地址,例如 PasswordBroker(发送密码重置电子邮件)例如,以及您包含的任何其他可以发送电子邮件的库。
因此,考虑到这一点,您可以执行以下操作:
- (可选)如果您想要默认的发件人地址,请在
config/mail.php
文件中设置发件人地址,您可以使用 env()
在 .env
文件中实际设置它] 文件。
- 然后,在每次调用
Mailer::send()
方法并且您想要一个不同的 "from" 地址之前,您只需使用您想要的发件人地址或设置它来调用 Mailer::alwaysFrom()
方法像这样 Mailer::alwaysFrom(null)
为 null 然后,您可以在发送给 Mailer::send()
方法的信息中发送 "from" 地址和名称。
例如:
Mail::alwaysFrom(null);
Mail::send('emails.welcome', $data, function ($message) {
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
// ...
});
或者你可以这样做:
// Get from the database, config or any other way which address from you want to use
Mail::alwaysFrom($fromEmail, $fromName);
Mail::send('emails.welcome', $data, function ($message) {
// ...
});
或者,如果您想要更多 "automatic",您可以执行以下操作:
- 从
Illuminate\Mail\Mailer
创建您自己的扩展 class
- 覆盖自定义邮件程序中的
send()
方法,以便它使用 $view
名称从数据库 table 中查找应该使用哪个 "from" 地址类似的东西,并且有一个 "default" 来自 for when it was not found.
- 从
Illuminate\Mail\MailServiceProvider
创建您自己的扩展 class
- 重写您的服务提供商中的
register()
方法,以便实例化您自己的 Mailer
而不是原始方法。
- 从您的
config/app.php
文件中删除或注释掉 Illuminate\Mail\MailServiceProvider::class,
并将您自己的 ServiceProvider 放在那里。
就是这样!您现在有了一个改进的 Mailer,它将根据您的视图名称使用发件人地址。
希望对您有所帮助。
注意: 如果您在 config/mail.php
中设置发件人地址,它将覆盖您在创建电子邮件时作为 "From" 发送的任何内容。
实际上没有设置多个发件人地址的方法。如何实施取决于您。
一种方法是创建一个配置文件(比如 config/addresses.php),其中包含您的地址数组:
return [
'enquiries' => 'someone@example.com',
'orders' => 'someone.else@example.com',
];
然后在发送电子邮件时只 select 他们:
Mail::send('enquiry', $data, function ($message) {
$message->from(config('addresses.enquiries'));
});
如果您不希望像这样在应用程序的源代码中硬编码电子邮件地址,那么您可以将它们移动到环境变量中,或者如果您希望它们可配置,则可以移动到数据库中。
如果您想同时向所有管理员发送电子邮件,您可以这样做:
在您的 .env 文件中,将所有电子邮件添加为逗号分隔值:
ADMIN_EMAILS=admin1@site.com,admin2@site.com,admin3@site.com
因此,当您要发送电子邮件时,只需执行此操作(是的!消息生成器实例的 'to' 方法接受一个数组):
所以,
$to = explode(',', env('ADMIN_EMAILS'));
和...
$message->to($to);
现在将邮件发送给所有管理员。
我一直在搜索,我检查了 Laravel 5 文档,但我没有找到任何东西。在 Laravel .env 示例文件中,它显示了如何将其设置为从一个电子邮件地址发送,但假设我想在不同情况下从不同的电子邮件地址发送,如何我会那样做吗?
.env
文件只是为您的应用程序设置值的一种方式。您可以(在一定范围内 - 请参阅 this answer 进行讨论)随意调用这些值。所以如果你想在你的环境中为不同的事件设置多个电子邮件地址,你可以在你的 .env
文件中做这样的事情:
MAIL_ONLOGIN=larry@example.com
MAIL_ONSIGNUP=moe@example.com
MAIL_ONERROR=curly@example.com
然后,在您应用程序的事件处理程序中(或您需要的任何地方),只需像这样访问适当的电子邮件地址:
// time to inform someone of a catastrophic error
Mail::send(
'emails.error',
['error' => $exception],
function ($m) use ($exception) {
$m->to(env('MAIL_ONERROR'))
->subject('Something broke! ' . $exception->getMessage());
});
我还应该提到 .env
文件旨在供开发使用 - 当需要将您的应用程序部署到生产环境时,删除 .env
文件并使用 "real" 服务器上用于这些值的环境变量。
在 Laravel 中没有 "default" 定义发件人地址集的方法,尽管您可以实现它。
以下是在 Laravel 中发送电子邮件时使用 "From" 的工作原理:
- 如果您在
config/mail.php
文件的from
配置中设置了null
以外的任何内容。 - 然后
MailServiceProvider
会在设置邮件对象时调用Mailer
方法alwaysFrom
。 - 如果
alwaysFrom
设置了地址,则每次发送电子邮件时都会使用该地址作为发件人地址。
不设置它的问题是在您无法控制发件人地址的情况下,您将没有 "default" 发件人地址,例如 PasswordBroker(发送密码重置电子邮件)例如,以及您包含的任何其他可以发送电子邮件的库。
因此,考虑到这一点,您可以执行以下操作:
- (可选)如果您想要默认的发件人地址,请在
config/mail.php
文件中设置发件人地址,您可以使用env()
在.env
文件中实际设置它] 文件。 - 然后,在每次调用
Mailer::send()
方法并且您想要一个不同的 "from" 地址之前,您只需使用您想要的发件人地址或设置它来调用Mailer::alwaysFrom()
方法像这样Mailer::alwaysFrom(null)
为 null 然后,您可以在发送给Mailer::send()
方法的信息中发送 "from" 地址和名称。
例如:
Mail::alwaysFrom(null);
Mail::send('emails.welcome', $data, function ($message) {
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
// ...
});
或者你可以这样做:
// Get from the database, config or any other way which address from you want to use
Mail::alwaysFrom($fromEmail, $fromName);
Mail::send('emails.welcome', $data, function ($message) {
// ...
});
或者,如果您想要更多 "automatic",您可以执行以下操作:
- 从
Illuminate\Mail\Mailer
创建您自己的扩展 class
- 覆盖自定义邮件程序中的
send()
方法,以便它使用$view
名称从数据库 table 中查找应该使用哪个 "from" 地址类似的东西,并且有一个 "default" 来自 for when it was not found. - 从
Illuminate\Mail\MailServiceProvider
创建您自己的扩展 class
- 重写您的服务提供商中的
register()
方法,以便实例化您自己的Mailer
而不是原始方法。 - 从您的
config/app.php
文件中删除或注释掉Illuminate\Mail\MailServiceProvider::class,
并将您自己的 ServiceProvider 放在那里。
就是这样!您现在有了一个改进的 Mailer,它将根据您的视图名称使用发件人地址。
希望对您有所帮助。
注意: 如果您在 config/mail.php
中设置发件人地址,它将覆盖您在创建电子邮件时作为 "From" 发送的任何内容。
实际上没有设置多个发件人地址的方法。如何实施取决于您。
一种方法是创建一个配置文件(比如 config/addresses.php),其中包含您的地址数组:
return [
'enquiries' => 'someone@example.com',
'orders' => 'someone.else@example.com',
];
然后在发送电子邮件时只 select 他们:
Mail::send('enquiry', $data, function ($message) {
$message->from(config('addresses.enquiries'));
});
如果您不希望像这样在应用程序的源代码中硬编码电子邮件地址,那么您可以将它们移动到环境变量中,或者如果您希望它们可配置,则可以移动到数据库中。
如果您想同时向所有管理员发送电子邮件,您可以这样做:
在您的 .env 文件中,将所有电子邮件添加为逗号分隔值:
ADMIN_EMAILS=admin1@site.com,admin2@site.com,admin3@site.com
因此,当您要发送电子邮件时,只需执行此操作(是的!消息生成器实例的 'to' 方法接受一个数组):
所以,
$to = explode(',', env('ADMIN_EMAILS'));
和...
$message->to($to);
现在将邮件发送给所有管理员。