问题描述
请注意,这不是重复的,因为我找不到其他有效的答案,而且没有一个问题像我下面所做的那样使用 Mailable->mailer()
方法自定义邮件程序。
我正在测试在我的 Laravel 8(在 Homestead 上)本地发送邮件,当我发送时,我使用以下代码(在控制台命令中):
// SendableEmail is a Mailable object
// $email are objects from which SendableEmail populates the content,recipient etc
foreach ($queue as $email) {
$message = new SendableEmail($email);
if ($dry_run)
$message = $message->mailer("fake_email"); // Notice this line
Log::debug("Should be sent.");
Mail::send($message);
}
我将默认邮件程序配置为将所有电子邮件发送到 laravel.log
,并且有效。但是正如您所看到的,如果我在进行试运行,我希望使用不同的邮件程序 fake_email
,它应该将电子邮件发送到名为 emails.log
的不同日志文件,而这个是不工作。
发生的情况是,无论 $dry_run
的值如何,电子邮件都会发送到 laravel.log
,换句话说,完全忽略我的自定义邮件程序。
在对我的 config 和 env 文件进行五重检查并多次刷新缓存后,我不知道还能在哪里查看,而且一定是遗漏了什么。
这是我的config/mail.php
:
// ...
'default' => env('MAIL_MAILER','log'),'mailers' => [
'log' => [
'transport' => 'log','channel' => env('MAIL_LOG_CHANNEL'),],'fake_email' => [
'transport' => 'log','channel' => 'fake_email',// ...
config/logging.php
:
'default' => env('LOG_CHANNEL','stack'),// ...
'channels' => [
'stack' => [
'driver' => 'stack','channels' => ['single'],'ignore_exceptions' => false,'fake_email' => [
'driver' => 'single','path' => storage_path('logs/emails.log'),'level' => 'debug','testing' => [
'driver' => 'single','path' => storage_path('logs/testing.log'),'level' => env('LOG_LEVEL','debug'),'single' => [
'driver' => 'single','path' => storage_path('logs/laravel.log'),
我的.env
:
APP_DEBUG=true
# ...
LOG_CHANNEL=stack
LOG_LEVEL=debug
# ...
QUEUE_CONNECTION=sync
# ...
MAIL_MAILER=log
# ...
如您所见,自定义邮件程序已配置,但从未创建或写入 emails.log
(我也尝试手动创建)。所发生的一切是,无论情况如何,电子邮件都会打印到 laravel.log
。
无论是在控制台还是日志中,我都没有收到异常抛出或错误。
有什么想法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)