我建立了一个联系表单,它发送两封电子邮件而不是一封。这是控制器:
<?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();
}
}
这是ClientContact邮件类
<?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特征但是没有改变任何东西,因为它还没有排队。我也尝试将它放在队列中,当队列最终再次处理电子邮件时,我会收到两封已发送的电子邮件。
有什么想法吗?
答案 0 :(得分:2)
这是一个mailtrap
问题,仅在您使用bcc
方法的情况下。
答案 1 :(得分:1)
好的,找到了解决方法。当我删除&#39;到&#39;在mail.php配置文件中输入,并在Mail :: send / queue命令中硬编码目标地址,而不是使用config获取目的地(&#39; mail.to&#39;),我收到1封电子邮件。如果我使用config()来定义收件人,我会收到2封电子邮件。希望这会有所帮助。
答案 2 :(得分:1)
我最近遇到了这个确切的问题。我所做的就是在表单中添加JS
功能(也可以使用jQuery或其他库),因此,每当提交表单时,包括按钮的所有输入都将被禁用/设置为只读。
使用此功能后,不再重复发送电子邮件。看看这个(我正在为此使用jQuery):
$(document).ready(function(){
$('form').on('submit', function(){
$('.btn').prop('disabled', true);
$('.btn').html('Sending ...');
$('input, textarea').prop('readonly', true);
});
});
每当您提交或单击表单中的按钮时,浏览器便会尝试在应用程序中调用post
请求,因此,通过使用这种简单的技术,您可以禁用在其中发送多个请求的功能。您的表格。
答案 3 :(得分:0)
如果您喜欢我并使用Macbook等(与Apple相关),则很有可能已打开icloud。这是问题,icloud备份并同步供应商文件夹,这是一场噩梦。就我而言,由于OSX的奇妙世界,我拥有4个邮件外观。
关闭icloud以获得文档(但是进行icloud上没有的本地备份),现在删除本地备份中的供应商文件夹并重新安装。 和..你完成了。哇!
答案 4 :(得分:0)
Chrome扩展程序问题
测试您的发布/获取/删除请求是否不在Chrome中,以及它们是否发送两次。如果他们没有在另一个浏览器中发送两次或两次以上,则请检查Chrome的隐身模式,是否出现相同的问题。
如果隐身模式下没有发生此错误,则说明您的Chrome插件或扩展程序有问题,需要删除(未禁用)。请发送故障报告给作为插件的开发人员,我确定他们想知道。