찾다

 >  Q&A  >  본문

php - larave5.3邮件问题

<?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,打印‘发送邮件失败,请重试’请问这是为什么?我百分之百肯定每次都成功。

大家讲道理大家讲道理2896일 전397

모든 응답(3)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-10 17:36:48

    Illuminate\Contracts\Mail\Mailer

    send这个方法不返回的.

    具体实现可以看下Illuminate\Mail\Mailersend.

    我也是找不出检测发送的方法

    哦,Illuminate\Mail\Mailer有个failure方法, 你可以试试

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:36:48

    send没有返回值,所以你的$flag总是null
    可以用failures检查:

    Mail::send(...);
    
    if (count(Mail::failures()) > 0) {
        // Mail::failures() 是一个包含发送失败的邮件地址的数组
        echo '发送邮件成功,请查收!';
    }

    회신하다
    0
  • 怪我咯

    怪我咯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;
    
    }

    회신하다
    0
  • 취소회신하다