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

Laravel多邮件驱动配置异常:自定义mailer发送邮件触发nullMX错误

Laravel多邮件驱动配置异常:自定义mailer发送邮件触发nullMX错误

看起来你在Laravel配置多邮件驱动时遇到了挺头疼的问题——明明默认SMTP用第二个邮箱能正常发件,但自定义的mail_payments驱动用第一个邮箱就触发了550 5.7.27 Sender address rejected: Domain example.com does not accept mail (nullMX)错误。结合你给出的配置和错误信息,我来帮你梳理下可能的问题点和解决方案:

核心问题分析

这个错误提示的nullMX意味着发件人地址对应的域名没有配置MX记录,但你提到默认SMTP用第二个邮箱能正常工作,说明不是example.com域名本身的问题,而是你的自定义mail_payments驱动没有正确指定发件人地址,导致Laravel fallback到了默认的hello@example.com(这个域名大概率没有配置MX记录)。

具体解决方案

1. 给自定义mailer添加发件人配置

你的config/mail.php里的mail_payments驱动只配置了SMTP传输参数,但缺少了发件人地址的配置项。Laravel会优先使用当前mailer的from配置,如果没有的话才会用全局的发件人设置。

修改config/mail.php中的mail_payments数组,添加from配置:

'mail_payments' => [
    'transport' => 'smtp',
    'host' => env('MAIL_HOST_1', 'smtp.mailgun.org'),
    'port' => env('MAIL_PORT_1', 587),
    'encryption' => env('MAIL_ENCRYPTION_1', 'tls'),
    'username' => env('MAIL_USERNAME_1'),
    'password' => env('MAIL_PASSWORD_1'),
    'timeout' => null,
    'local_domain' => env('MAIL_EHLO_DOMAIN'),
    // 新增发件人配置
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS_1', 'payments@example.com'),
        'name' => env('MAIL_FROM_NAME_1', env('APP_NAME')),
    ],
],

2. 或者在Mailable类中明确指定发件人

如果你不想修改mailer的全局配置,也可以在Paid_Profits这个Mailable类的build方法里直接指定发件人,确保每次发送都用正确的邮箱:

namespace App\Mail;

use Illuminate\Mail\Mailable;

class Paid_Profits extends Mailable
{
    protected $mailData;

    public function __construct($mailData)
    {
        $this->mailData = $mailData;
    }

    public function build()
    {
        return $this->from(env('MAIL_FROM_ADDRESS_1'), env('MAIL_FROM_NAME_1'))
                    ->subject($this->mailData['title'])
                    ->view('emails.paid_profits') // 替换成你的邮件视图路径
                    ->with($this->mailData);
    }
}

3. 验证配置是否生效

修改配置后,记得再次清除配置缓存:

php artisan config:clear
php artisan cache:clear

可以在控制器里临时打印一下配置,确认发件人地址是否正确加载:

// 在send_form方法里添加
dd(env('MAIL_FROM_ADDRESS_1'), config('mail.mailers.mail_payments.from.address'));

4. 排查SMTP服务商限制

有些邮件服务商(比如你用的privateemail.com)会要求发件人地址必须与SMTP登录用户名一致,或者需要在后台验证域名/邮箱。你的MAIL_USERNAME_1和MAIL_FROM_ADDRESS_1都是payments@example.com,这部分是匹配的,但可以登录邮件服务商后台确认该邮箱是否已验证,是否允许作为发件人。

总结

最可能的根源就是自定义mailer没有指定发件人,导致Laravel使用了默认的hello@example.com作为发件人,而这个域名没有MX记录触发了错误。按照上面的方法添加发件人配置后,应该就能解决问题了。

备注:内容来源于stack exchange,提问作者spy share

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:32:40