[英]Form sending mail thrice in laravel 5
自从我开始学习laravel以来,我从未遇到过这个奇怪的问题。
我有一个联系表: contact.blade.php
{!! Form::open(['url' => '/contact-form', 'id' => 'formContact']) !!}
<div class="col-md-12 col-sm-12 form-group">
{!! Form::label('full_name', 'Full Name:', ['class' => 'fw_400']) !!}
{!! Form::text('full_name', null, ['class' => 'form-control input-sm']) !!}
</div>
<div class="col-md-6 col-sm-6 form-group">
{!! Form::label('email', 'Email:', ['class' => 'fw_400']) !!}
{!! Form::text('email', null, ['class' => 'form-control input-sm']) !!}
</div>
<div class="col-md-6 col-sm-6 form-group">
{!! Form::label('contact', 'Contact Number:', ['class' => 'fw_400']) !!}
{!! Form::text('contact', null, ['class' => 'form-control input-sm']) !!}
</div>
<div class="col-md-12 col-sm-12 form-group">
{!! Form::label('contact_message', 'Contact Message:', ['class' => 'fw_400']) !!}
{!! Form::textarea('contact_message', null, ['class' => 'form-control input-sm', 'rows' => 5]) !!}
</div>
<div class="col-md-12 col-sm-12 form-group">
{!! Form::submit('Submit', ['class' => 'btn btn-primary btn-block btnContactOnContactPage']) !!}
</div>
{!! Form::close() !!}
当我单击提交按钮时,就会进行AJAX调用。这是ajax处理程序:
(function() {
$('#formContact').submit(function(e) {
$('.btnContactOnContactPage').prop('disabled', true);
var inputData = $('#formContact').serialize();
$.ajax({
url: $('#formContact').attr('action'),
type: 'POST',
data: inputData,
success: function(m) {
$('.btnContactOnContactPage').prop('disabled', false);
if (m.status === 'success') {
toastr.success(m.msg);
setTimeout(function() {
window.location.reload();
}, 3000)
}
},
error: function(e) {
if (e.status === 422) {
$('.btnContactOnContactPage').prop('disabled', false);
var errors = e.responseJSON;
var errorsHtml = '<div class="alert alert-danger"><ul>';
errorsHtml += '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>';
$.each(errors, function(key, value) {
errorsHtml += '<li class="text-danger">' + value[0] + '</li>';
});
errorsHtml += '</ul></div>';
$('.errors').html(errorsHtml);
}
}
});
return false;
});
})();
和控制器方法:
public function postContact(Request $request)
{
$this->validate($request, [
'full_name' => 'required',
'email' => 'required|email',
'contact' => 'required|regex:/^[0-9+\-]+$/',
'contact_message' => 'required'
]);
if ($request->ajax()) {
$prevContactCode = DB::table('contact_messages')->latest()->limit(1)->pluck('cont_code');
if ($prevContactCode == "" || empty($prevContactCode)) {
$request['cont_code'] = 'CON-000001';
}
else {
$request['cont_code'] = ++$prevContactCode;
}
$contactMessage = ContactMessage::create($request->all());
$dataToMail = [
'cont_code' => $contactMessage->cont_code,
'full_name' => $contactMessage->full_name,
'email' => $contactMessage->email,
'contact' => $contactMessage->contact,
'contact_message' => $contactMessage->contact_message
];
$mail = Mail::send('emails.contact', $dataToMail, function ($message) use($dataToMail)
{
$message->from($dataToMail['email'], $dataToMail['full_name']);
$message->to('contact@example.com', 'Example Contact')
->subject('Contact Form Details from example.com (Form No.:' . $dataToMail['cont_code'] . ')')
->cc(['ex@example.net', 'exam@hotmail.com'])
->bcc(['examp@gmail.com', 'esmap@example.net']);
});
var_dump($mail); // displays **int 5** in chrome console
dd($mail); // displays **5** in chrome console
if ($mail) {
return response(['status' => 'success', 'msg' => 'Contact form details has been successfully submitted.']);
}
}
return response(['status' => 'failed', 'msg' => 'Something went wrong. Please try again later.']);
}
问题是,该邮件被发送三次,而不是发送一次。 我不知道这里发生了什么。 早些时候(可能是5个月后),它运行正常,而现在,突然开始了。 我试图弄清楚背后的原因是什么,但没有成功。 我还使用composer update
更新了框架,但问题仍然存在。
编辑1 :我正在使用Mail
门面进行反复试验,并且我猜问题出在bcc
方法中,因为我没有尝试bcc
和cc
,它按预期工作。 然后我再次尝试使用cc
而不使用bcc
,这一次它也按预期正常工作,但是当使用cc
添加bcc
时,我收到了三次相同的邮件。
我在哪里弄错了? 请帮我。
此问题的常见原因可能是没有阻止点击传播。 这意味着即使您与放在顶部的其他控件进行交互也可能会发送请求。
另一个原因是单击方法绑定发生了多次。 服务器响应到来后绑定单击事件时,就会发生这种情况。 在这种情况下,这是一个常见问题。
如果您可以尝试在初始化请求的点击事件上添加console.log,那就太好了。 并查看它记录了多少次。
如果您不能缩小范围,那么可以提取代码子集并将其发布在JSfiddle或其他上以便其他人查看的情况下,那还是很棒的。
希望它会有所帮助。
一些邮件驱动程序(通常是Mandrill) 将CC和BCC电子邮件作为单独的电子邮件发送,而不是将它们视为单个电子邮件 。
我没有使用过邮件陷阱,但是在您的情况下也可能会发生同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.