<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
class MailController extends Controller
{
public function send()
{
$name = '隔壁老王';
$flag = Mail::send('emails.test',['name'=>$name],function($message){
$to = '13580584313@163.com';
$message ->to($to)->subject('成功啦');
});
if($flag){
echo '发送邮件成功,请查收!';
}else{
echo '发送邮件失败,请重试!';
}
}
}
这是我发邮件的控制器,路由和配置就不贴了,我的问题是:我邮件明明发送成功了,可是$flag每次都是null,打印‘发送邮件失败,请重试’请问这是为什么?我百分之百肯定每次都成功。
高洛峰2017-04-10 17:36:48
Illuminate\Contracts\Mail\Mailer
send
这个方法不返回的.
具体实现可以看下Illuminate\Mail\Mailer
的send
.
我也是找不出检测发送的方法
哦,Illuminate\Mail\Mailer
有个failure
方法, 你可以试试
伊谢尔伦2017-04-10 17:36:48
send
没有返回值,所以你的$flag总是null
。
可以用failures
检查:
Mail::send(...);
if (count(Mail::failures()) > 0) {
// Mail::failures() 是一个包含发送失败的邮件地址的数组
echo '发送邮件成功,请查收!';
}
怪我咯2017-04-10 17:36:48
没有返回值的;我分别给简化成函数和方法便于理解;亲测可用;
/**
* 发送邮件函数
*
* @param $email 收件人邮箱 如果群发 则传入数组
* @param $name 收件人名称
* @param $subject 标题
* @param $data 邮件内容数组形式 邮件模板中需要用的的变量 示例:['name'=>'帅白','phone'=>'110']
* @param string $template 邮件模板
* @return array 发送状态
*/
function sendEmail($email, $name, $subject, $data, $template='emails.test')
{
Mail::send($template, $data, function($message) use($email, $name, $subject) {
//如果是数组;则群发邮件
if (is_array($email)) {
foreach ($email as $k => $v) {
$message->to($v, $name)->subject($subject);
}
}else{
$message->to($email, $name)->subject($subject);
}
});
if (count(Mail::failures()) > 0) {
$data=array(
'status_code'=>500,
'message'=>'邮件发送失败'
);
}else{
$data=array(
'status_code'=>200,
'message'=>'邮件发送成功'
);
}
return $data;
}
/**
* 发送邮件方法
*/
public function sendEmail()
{
$email = '收件人邮箱';
$name = '收件人名称';
$subject = '标题';
$data = ['邮件内容数组形式'];
$template = '邮件模板';
Mail::send($template, $data, function($message) use($email, $name, $subject) {
//如果是数组;则群发邮件
if (is_array($email)) {
foreach ($email as $k => $v) {
$message->to($v, $name)->subject($subject);
}
}else{
$message->to($email, $name)->subject($subject);
}
});
if (count(Mail::failures()) > 0) {
$data=array(
'status_code'=>500,
'message'=>'邮件发送失败'
);
}else{
$data=array(
'status_code'=>200,
'message'=>'邮件发送成功'
);
}
return $data;
}