You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel发送邮件报错:Attempt to read property "email" on null 求修复

问题分析

Attempt to read property "email" on null 错误说明你正在尝试读取一个null值的email属性,核心原因是传递给邮件系统的收件人对象/变量为null,或者在模板中直接访问了未初始化的null变量。以下是针对性的代码修正方案:


1. 修正 EmailController

确保你获取的收件人数据有效,避免传递null到邮件类:

错误示例

// EmailController.php
public function sendProductEmail()
{
    // 可能获取到不存在的用户,导致$user为null
    $user = User::find(999); 
    Mail::to($user)->send(new ProductMail());
}

修正后代码

// EmailController.php
use App\Models\User;
use App\Mail\ProductMail;
use Illuminate\Support\Facades\Mail;

public function sendProductEmail()
{
    // 方式1:使用findOrFail,找不到用户直接抛出异常
    $user = User::findOrFail(1);

    // 方式2:手动判断用户是否存在
    // $user = User::find(1);
    // if (!$user) {
    //     return redirect()->back()->with('error', '收件人不存在');
    // }

    // 直接传递邮箱字符串(避免依赖对象)或带有效数据的对象
    Mail::to($user->email)->send(new ProductMail($user));
    
    return redirect()->back()->with('success', '邮件发送成功');
}

2. 修正 ProductMail 类

确保邮件类正确接收并传递数据到模板,避免模板使用null变量:

错误示例

// ProductMail.php
class ProductMail extends Mailable
{
    public $user;

    public function __construct()
    {
        // 未初始化$user,导致模板中$user为null
    }

    public function build()
    {
        return $this->view('emails.product-template');
    }
}

修正后代码

// ProductMail.php
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use App\Models\User;

class ProductMail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    // 构造函数强制接收User对象,确保传入数据有效
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->view('emails.product-template')
                    // 显式传递数据到模板(可选,增强可读性)
                    ->with(['user' => $this->user]);
    }
}

3. 修正 product-template.blade.php 模板

在模板中增加变量校验,避免直接访问null的属性:

错误示例

<!-- product-template.blade.php -->
<p>您好,{{ $user->email }}</p>

修正后代码

<!-- product-template.blade.php -->
<!-- 方式1:条件判断 -->
@if(isset($user) && $user)
    <p>您好,{{ $user->email }}</p>
@else
    <p>您好,访客</p>
@endif

<!-- 方式2:PHP 8+ 可选链+空值合并 -->
<p>您好,{{ $user?->email ?? '访客' }}</p>

内容的提问来源于stack exchange,提问作者Muhammad Gunawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:45:45