为什么 Laravel 发送了两次邮件?
Why is Laravel sending mail twice?
我建立了一个联系表,它发送两封电子邮件而不是一封。这是控制器:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ContactFormRequest;
use App\Mail\ClientContact;
use Illuminate\Support\Facades\Mail;
class ContactController extends Controller
{
/**
* It sends a contact request and returns
* the user back to the contact form.
* @param ContactFormRequest $request
* @return mixed
*/
public function send(ContactFormRequest $request)
{
Mail::send(new ClientContact($request->only(['name','email','message'])));
session()->flash('success','Your message was sent successfully!');
return redirect()->back();
}
}
这是客户联系邮件Class
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ClientContact extends Mailable
{
use Queueable, SerializesModels;
/**
* @var
*/
public $message;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($message)
{
$this->message = $message;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this
->from(config('mail.from.address'))
->markdown('emails.client.contact', ['message' => $this->message]);
}
}
这是我的测试环境,因此我正在通过 Mailtrap.io 捕获外发邮件并将队列设置为同步。我已经尝试删除 Queueable 特性,但这并没有改变任何东西,因为它无论如何都不在排队。我也试过把它放在队列中,当队列最终处理完邮件时,我又收到了两封已发送的邮件。
有什么想法吗?
好的,找到解决方法。当我删除 mail.php 配置文件中的 'to' 条目,并在 Mail::send/queue 命令中硬编码目标地址而不是使用 config('mail.to' ), 我收到一封电子邮件。如果我使用 config() 来定义收件人,我会收到 2 封电子邮件。希望这有帮助。
我最近遇到了这个确切的问题。我所做的是在表单中添加 JS
功能(您也可以使用 jQuery 或其他库),因此无论何时提交表单,包括按钮在内的所有输入都将 disabled/set 到只读。
使用后,不再重复发送邮件。看看这个(我为此使用 jQuery):
$(document).ready(function(){
$('form').on('submit', function(){
$('.btn').prop('disabled', true);
$('.btn').html('Sending ...');
$('input, textarea').prop('readonly', true);
});
});
每当您提交或单击表单中的按钮时,浏览器都会尝试在您的应用程序中调用 post
请求,因此通过使用这种简单的技术,您可以禁用发送多个请求的能力在您的表单中请求。
这是一个 mailtrap
问题,只有当您使用 bcc
方法时才会出现。
如果你像我一样使用 Macbook 等(Apple 相关),你很可能已经打开了 icloud。这就是问题所在,icloud 备份并同步供应商文件夹,这是一场噩梦。就我而言,由于 OSX.
的精彩世界,我有 4 个邮件门面
关闭文档的 icloud(但制作不在 icloud 上的本地备份),现在删除本地备份中的 vendor 文件夹并重新安装。
并且.. 你完成了。沃拉
Chrome 扩展问题
测试您的 post/get/delete 请求是否在 chrome 中以及它们是否发送了两次。如果他们没有在另一个浏览器中发送两次或更多次,请检查 chromes 的隐身模式,看看是否出现同样的问题。
如果它在隐身模式下没有发生,那么你有一个错误的 chrome 插件或扩展需要删除(不是禁用)。请将故障报告发送给 plugin/extension 作为开发人员的开发人员,我相信他们想知道。
我建立了一个联系表,它发送两封电子邮件而不是一封。这是控制器:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ContactFormRequest;
use App\Mail\ClientContact;
use Illuminate\Support\Facades\Mail;
class ContactController extends Controller
{
/**
* It sends a contact request and returns
* the user back to the contact form.
* @param ContactFormRequest $request
* @return mixed
*/
public function send(ContactFormRequest $request)
{
Mail::send(new ClientContact($request->only(['name','email','message'])));
session()->flash('success','Your message was sent successfully!');
return redirect()->back();
}
}
这是客户联系邮件Class
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ClientContact extends Mailable
{
use Queueable, SerializesModels;
/**
* @var
*/
public $message;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($message)
{
$this->message = $message;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this
->from(config('mail.from.address'))
->markdown('emails.client.contact', ['message' => $this->message]);
}
}
这是我的测试环境,因此我正在通过 Mailtrap.io 捕获外发邮件并将队列设置为同步。我已经尝试删除 Queueable 特性,但这并没有改变任何东西,因为它无论如何都不在排队。我也试过把它放在队列中,当队列最终处理完邮件时,我又收到了两封已发送的邮件。
有什么想法吗?
好的,找到解决方法。当我删除 mail.php 配置文件中的 'to' 条目,并在 Mail::send/queue 命令中硬编码目标地址而不是使用 config('mail.to' ), 我收到一封电子邮件。如果我使用 config() 来定义收件人,我会收到 2 封电子邮件。希望这有帮助。
我最近遇到了这个确切的问题。我所做的是在表单中添加 JS
功能(您也可以使用 jQuery 或其他库),因此无论何时提交表单,包括按钮在内的所有输入都将 disabled/set 到只读。
使用后,不再重复发送邮件。看看这个(我为此使用 jQuery):
$(document).ready(function(){
$('form').on('submit', function(){
$('.btn').prop('disabled', true);
$('.btn').html('Sending ...');
$('input, textarea').prop('readonly', true);
});
});
每当您提交或单击表单中的按钮时,浏览器都会尝试在您的应用程序中调用 post
请求,因此通过使用这种简单的技术,您可以禁用发送多个请求的能力在您的表单中请求。
这是一个 mailtrap
问题,只有当您使用 bcc
方法时才会出现。
如果你像我一样使用 Macbook 等(Apple 相关),你很可能已经打开了 icloud。这就是问题所在,icloud 备份并同步供应商文件夹,这是一场噩梦。就我而言,由于 OSX.
的精彩世界,我有 4 个邮件门面关闭文档的 icloud(但制作不在 icloud 上的本地备份),现在删除本地备份中的 vendor 文件夹并重新安装。 并且.. 你完成了。沃拉
Chrome 扩展问题
测试您的 post/get/delete 请求是否在 chrome 中以及它们是否发送了两次。如果他们没有在另一个浏览器中发送两次或更多次,请检查 chromes 的隐身模式,看看是否出现同样的问题。
如果它在隐身模式下没有发生,那么你有一个错误的 chrome 插件或扩展需要删除(不是禁用)。请将故障报告发送给 plugin/extension 作为开发人员的开发人员,我相信他们想知道。