[英]Email verification does not seem to be sending anymore
当用户使用新的电子邮件地址注册时,我想发送电子邮件验证。 所以在注册控制器我添加了这个:
public function register(Request $request)
{
if(Session::has('email')){
return Redirect::back()->withErrors(['msg' => 'Email was already sent to you, please check the spam folder too.']);
}else{
$validatedEmail = $request->validate([
'user_input' => 'required|unique:users,usr_email|regex:/(.+)@(.+)\.(.+)/i|max:125|min:3',
],[
'user_input.required' => 'You must enter this field',
'user_input.unique' => 'This email is already registered',
'user_input.regex' => 'This email is not correct',
'user_input.max' => 'Maximum length must be 125 characters',
'user_input.min' => 'Minimum length must be 3 characters',
]);
$register = new NewRegisterMemberWithEmail();
return $register->register();
}
}
因此,如果电子邮件有效,它将调用一个帮助类NewRegisterMemberWithEmail
,如下所示:
class NewRegisterMemberWithEmail
{
public function register()
{
try{
$details = [
'title' => 'Verify email'
];
Mail::to(request()->all()['user_input'])->send(new AuthMail($details));
Session::put('email',request()->all()['user_input']);
return redirect()->route('login.form');
}catch(\PDOException $e){
dd($e);
}
}
}
所以它曾经工作正常并正确发送电子邮件进行验证,但我不知道为什么它现在不发送电子邮件。
事实上,我已经用不同的邮件服务提供商对此进行了测试,对于Yahoo和Gmail ,电子邮件都没有以某种方式收到!
但是对于我所在国家/地区的本地邮件服务提供商,电子邮件已正确发送!
我真的不知道这里发生了什么,因为逻辑似乎很好......
所以如果你知道,请告诉我......我真的很感谢你们的任何想法或建议。
如果您想看一下,这也是我的AuthMail
类:
class AuthMail extends Mailable
{
use Queueable, SerializesModels;
public $details;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Sitename')->view('emails.AuthMail');
}
}
当我将Gmail
用作smtp
时,我曾经遇到过同样的问题。
当我们直接在 smtp 设置中使用我们的Gmail
密码时,由于某些 Gmail policies
,它会在某个时间(几个月)后被阻止并停止发送电子邮件。
我们需要从我们的 Gmail 安全性中创建一个app-password
,并在smtp
设置中使用该密码。 下面的谷歌文章将指导:
laravel
smtp 设置:MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<your-email>
MAIL_PASSWORD=<app-password>
MAIL_ENCRYPTION=tls
我希望这会对你有所帮助。
如果您使用谷歌邮件发送电子邮件,那么我们有同样的问题。
2022 年 5 月 30 日,Google 将停止支持安全性较低的应用程序或第三方应用程序。
这就是我认为您的发送邮件不起作用的原因(如果您使用谷歌邮件作为邮件发件人,请考虑这个答案)
我在发送电子邮件时遇到问题,尤其是发送到 gmail 帐户。 所以我改变了我的方法并克服了这个问题。
请在下面查看我的答案
示例邮件类
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Symfony\Component\Mime\Email;
class OrderInfoMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$this
->subject('Order Confirmation')
->from('noreply@app.xxx.co.uk', 'XXX Portal')
->view('orders.templates.order-form')
->with([
'name' => $this->data->name,
'sales_representative_name' => $this->data->sales_representative_name,
'sales_representative_phone' => $this->data->sales_representative_phone,
"items" => $this->data->items,
"address" => $this->data->address,
"net" => $this->data->net,
"payment" => $this->data->payment,
"balance" => $this->data->balance,
]);
$this->withSymfonyMessage(function (Email $message) {
$message->getHeaders()->addTextHeader(
'X-Mailer', 'PHP/' . phpversion()
);
});
return $this;
}
}
用法
$email = 'a@b.com'; // pls change
$name = 'ab';// pls change
$data = new \stdClass();
$data->name = $name;
$data->sales_representative_name = \App\User::find(Auth::user()->id)->name;
$data->sales_representative_phone = \App\User::find(Auth::user()->id)->phones->first()->number;
$data->items = $order_items;
$data->address = $address;
$data->net = $net;
$data->payment = $payment;
$data->balance = $balance;
Mail::to($email)->send(new \App\Mail\OrderInfoMail($data));
我认为问题不在于您的代码。 我认为这与您发送的做法有关。 一种解决方案是使用旨在发送电子邮件的服务,例如 SparkPost(完全披露我为 SparkPost 工作)。 还有很多其他的。 这些服务可以帮助您确保遵循电子邮件最佳做法。
您可以在没有电子邮件服务的情况下完成这项工作,但至少您应该验证您是否遵循 MAAWG 提出的最佳实践: https ://www.m3aawg.org/published-documents
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.