Laravel:不会发送电子邮件
Laravel: wont' send the Email
在 Laravel 中使用邮件功能时,出现如下所示的错误。
我试过先将所有数据都放在 .env 文件中,然后从 config/mail.php
中获取
然后在 mail.php 中对其进行硬编码,以防无法从那里获取它。
我也尝试了不同的端口,预期的是 465,还有 587 和 25,但没有任何变化。
我也试过不同的smtp服务器,我也试过其他网站的不同(有效)邮件。所以这不是我的服务器宕机或类似的事情。
我用这个来注册用户,然后给他们发一封确认邮件让他们点击。保存在table还好,但是发邮件的时候发不出去
我还尝试在控制器文件中对 To: 地址进行硬编码,以防它不是从 $data 数组中获取的。没有变化。
Mail::send('auth.emails.register', ['data' => $data ], function($mail) use($data) { $mail->from('a@chefpi.com', 'Your Application');
$mail->subject('Confirm your mail');
$mail->to($data['email'], $data['name']);
});
return redirect("auth/register")
->with("message", "A confirmation link has been sent to your email");
}
您可以在错误显示中看到它确实获得了收件人地址和 Confirm_token(也保存在 Table 中)
读取的错误是这样的:
Swift_TransportException in AbstractSmtpTransport.php line 404:
Connection to server.websitehostserver.net:465 Timed Out
in AbstractSmtpTransport.php line 404
at Swift_Transport_AbstractSmtpTransport->_getFullResponse('0') in AbstractSmtpTransport.php line 289
at Swift_Transport_AbstractSmtpTransport->_readGreeting() in
AbstractSmtpTransport.php line 117
at Swift_Transport_AbstractSmtpTransport->start() in Mailer.php line 79
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 386
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 173
at Mailer->send('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'madina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFWUvwlNcMLmwvMQ1T64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure)) in compiled.php line 6222
at Facade::__callStatic('send', array('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'madina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFWUvwKtwdzwT64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure))) in AuthController.php line 84
at Mail::send('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'mayarodina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFbHWqszKtwdzwT64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure))
in AuthController.php line 84
我正在添加完整控制器,以防万一:
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
use Mail;
use Auth;
use Illuminate\Support\Facades\Input;
class AuthController extends Controller
{
/*
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
public function postRegister(Request $request){
$rules = [
'name' => 'required|min:3|max:16|regex:/^[a-záéíóúàèìòùäëïöüñ\s]+$/i',
'email' => 'required|email|max:255|unique:users,email',
'password' => 'required|min:6|max:18|confirmed',
];
$messages = [
'name.required' => 'This field is required',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()){
return redirect("auth/register")
->withErrors($validator)
->withInput();
}
else{
$user = new User;
$data['name'] = $user->name = $request->name;
$data['email'] = $user->email = $request->email;
$user->password = bcrypt($request->password);
$user->remember_token = str_random(100);
$data['confirm_token'] = $user->confirm_token = str_random(100);
$user->save();
Mail::send('auth.emails.register', ['data' => $data ], function($mail) use($data) {
$mail->from('a@chefpisos.com', 'Your Application');
$mail->subject('Confirm your mail');
$mail->to($data['email'], $data['name']);
});
return redirect("auth/register")
->with("message", "A confirmation link has been sent to your email");
}
}
public function confirmRegister($email, $confirm_token)
{
$user = new User;
$the_user = $user->select()->where('email', '=', $email)
->where('confirm_token', '=', $confirm_token)
->get();
if (count($the_user) > 0)
{
$active = 1;
$confirm_token = str_random(100);
$user ->where('email', '=', $email)
->update(['active' => $active, 'confirm_token' => $confirm_token]);
return redirect('auth/register')
->with("message", 'Congrats'. $the_user[0]['name'] . 'account activated');
}
else{
return redirect('/');
}
}
public function postLogin(Request $request){
if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'active' => 1])) {
return redirect()->intended($this->redirectPath());
}
else{
$rules = [
'email' => 'required|email',
'password' => 'required',
];
$messages = [
'email.required' => 'El campo email es requerido',
'email.email' => 'El formato de email es incorrecto',
'password.required' => 'El campo password es requerido',
];
$validator = Validator::make($request->all(), $rules, $messages);
return redirect('auth/login')
->withErrors($validator)
->withInput()
->with('message', 'Error al iniciar sesión');
}
}
}
与我的网络托管服务提供商所说的我必须使用 465 的说法相反,我选择了 587,但我不知道为什么,但这次成功了。
奇怪的是,我在同一台服务器上托管了另一个网站,我在那里使用 465 没有任何问题。
但是,它不会通过我的其他网站中的那个端口出去。我永远不会知道为什么。
我已经阅读了互联网上所有类似的案例,它们都确实存在端口 465 的问题,最后使用另一个端口工作。
如果您遇到类似的问题,只需复制我上面的代码,它是完整的并且可以工作。
感谢所有查看此问题的人。
在 Laravel 中使用邮件功能时,出现如下所示的错误。
我试过先将所有数据都放在 .env 文件中,然后从 config/mail.php
中获取然后在 mail.php 中对其进行硬编码,以防无法从那里获取它。
我也尝试了不同的端口,预期的是 465,还有 587 和 25,但没有任何变化。
我也试过不同的smtp服务器,我也试过其他网站的不同(有效)邮件。所以这不是我的服务器宕机或类似的事情。
我用这个来注册用户,然后给他们发一封确认邮件让他们点击。保存在table还好,但是发邮件的时候发不出去
我还尝试在控制器文件中对 To: 地址进行硬编码,以防它不是从 $data 数组中获取的。没有变化。
Mail::send('auth.emails.register', ['data' => $data ], function($mail) use($data) { $mail->from('a@chefpi.com', 'Your Application');
$mail->subject('Confirm your mail');
$mail->to($data['email'], $data['name']);
});
return redirect("auth/register")
->with("message", "A confirmation link has been sent to your email");
}
您可以在错误显示中看到它确实获得了收件人地址和 Confirm_token(也保存在 Table 中)
读取的错误是这样的:
Swift_TransportException in AbstractSmtpTransport.php line 404:
Connection to server.websitehostserver.net:465 Timed Out
in AbstractSmtpTransport.php line 404
at Swift_Transport_AbstractSmtpTransport->_getFullResponse('0') in AbstractSmtpTransport.php line 289
at Swift_Transport_AbstractSmtpTransport->_readGreeting() in
AbstractSmtpTransport.php line 117
at Swift_Transport_AbstractSmtpTransport->start() in Mailer.php line 79
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 386
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 173
at Mailer->send('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'madina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFWUvwlNcMLmwvMQ1T64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure)) in compiled.php line 6222
at Facade::__callStatic('send', array('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'madina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFWUvwKtwdzwT64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure))) in AuthController.php line 84
at Mail::send('auth.emails.register', array('data' => array('name' => 'aaaaa', 'email' => 'mayarodina@yandex.ru', 'confirm_token' => 'x5nSRdqgPApFbHWqszKtwdzwT64IKpfX0IHjqm7zjwfDYEhCSGPixJyNky2XU5')), object(Closure))
in AuthController.php line 84
我正在添加完整控制器,以防万一:
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
use Mail;
use Auth;
use Illuminate\Support\Facades\Input;
class AuthController extends Controller
{
/*
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
public function postRegister(Request $request){
$rules = [
'name' => 'required|min:3|max:16|regex:/^[a-záéíóúàèìòùäëïöüñ\s]+$/i',
'email' => 'required|email|max:255|unique:users,email',
'password' => 'required|min:6|max:18|confirmed',
];
$messages = [
'name.required' => 'This field is required',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()){
return redirect("auth/register")
->withErrors($validator)
->withInput();
}
else{
$user = new User;
$data['name'] = $user->name = $request->name;
$data['email'] = $user->email = $request->email;
$user->password = bcrypt($request->password);
$user->remember_token = str_random(100);
$data['confirm_token'] = $user->confirm_token = str_random(100);
$user->save();
Mail::send('auth.emails.register', ['data' => $data ], function($mail) use($data) {
$mail->from('a@chefpisos.com', 'Your Application');
$mail->subject('Confirm your mail');
$mail->to($data['email'], $data['name']);
});
return redirect("auth/register")
->with("message", "A confirmation link has been sent to your email");
}
}
public function confirmRegister($email, $confirm_token)
{
$user = new User;
$the_user = $user->select()->where('email', '=', $email)
->where('confirm_token', '=', $confirm_token)
->get();
if (count($the_user) > 0)
{
$active = 1;
$confirm_token = str_random(100);
$user ->where('email', '=', $email)
->update(['active' => $active, 'confirm_token' => $confirm_token]);
return redirect('auth/register')
->with("message", 'Congrats'. $the_user[0]['name'] . 'account activated');
}
else{
return redirect('/');
}
}
public function postLogin(Request $request){
if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'active' => 1])) {
return redirect()->intended($this->redirectPath());
}
else{
$rules = [
'email' => 'required|email',
'password' => 'required',
];
$messages = [
'email.required' => 'El campo email es requerido',
'email.email' => 'El formato de email es incorrecto',
'password.required' => 'El campo password es requerido',
];
$validator = Validator::make($request->all(), $rules, $messages);
return redirect('auth/login')
->withErrors($validator)
->withInput()
->with('message', 'Error al iniciar sesión');
}
}
}
与我的网络托管服务提供商所说的我必须使用 465 的说法相反,我选择了 587,但我不知道为什么,但这次成功了。
奇怪的是,我在同一台服务器上托管了另一个网站,我在那里使用 465 没有任何问题。
但是,它不会通过我的其他网站中的那个端口出去。我永远不会知道为什么。
我已经阅读了互联网上所有类似的案例,它们都确实存在端口 465 的问题,最后使用另一个端口工作。
如果您遇到类似的问题,只需复制我上面的代码,它是完整的并且可以工作。
感谢所有查看此问题的人。