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

Laravel 8调用Mail::send发信报530 5.7.0 Must issue a STARTTLS错误

问题定位与解决方案

错误说明

你遇到的报错是SMTP服务器强制要求通信前先发起TLS加密握手返回的错误信息:

530 5.7.0 Must issue a STARTTLS command first

两种发信方式的逻辑差异

Laravel的Notification邮件通道和Mail::send的底层SMTP连接逻辑完全一致,出现一个正常一个报错的核心原因是配置加载的差异:

  • Notification的邮件通道默认读取全局默认mailer配置,会完整加载config/mail.php中的encryption参数,只要你的.env中MAIL_ENCRYPTION=tls配置正确,就会自动发起STARTTLS请求,因此运行正常
  • Mail::send报错通常是因为调用时加载的mailer配置缺失加密参数,常见场景包括:
    • 调用时手动指定了自定义mailer,对应mailer在config/mail.php中没有配置encryption参数
    • 自定义Mailable类中通过$mailer属性指定了无加密配置的自定义mailer
    • 代码运行过程中临时覆盖了mail配置的encryption值为空

修复方案

按以下步骤逐一排查即可解决:

  1. 检查config/mail.php中所有用到的mailer配置,确保都存在加密配置项:
'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'host' => env('MAIL_HOST', 'smtp.qq.com'),
        'port' => env('MAIL_PORT', 587),
        // 确保下面这行没有被注释,参数值正确
        'encryption' => env('MAIL_ENCRYPTION', 'tls'),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],
    // 其他自定义mailer也需要按上述格式添加encryption配置
],
  1. 检查Mail::send的调用代码,确认指定的mailer和配置中的一致:
// 正确用法,使用默认mailer,加载全局配置
Mail::send(...);

// 如果使用自定义mailer,确保对应配置存在encryption参数
Mail::mailer('your_custom_mailer')->send(...);
  1. 若配置排查无问题,可以在调用Mail::send前临时强制设置加密参数验证:
// 临时强制覆盖默认smtp的加密配置为tls
config(['mail.mailers.smtp.encryption' => 'tls']);
Mail::send(...);
  1. 确认.env配置的端口和加密方式匹配:
  • TLS加密对应端口通常为587
  • SSL加密对应端口通常为465
  • 25端口为非加密端口,绝大多数云服务商和邮件服务商已经屏蔽该端口的发信请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:04