Laravel的邮件发送,在Controller中Http请求就可以发成功,php artisan命令执行就发不成功

use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;

try {
    Mail::mailer('smtp_2')->send([], [], function ($msg) {
    // 从配置中获取发送者的邮箱地址
    $fromEmail = config('mail.mailers.smtp_2.username');

    $msg->from($fromEmail, $fromEmail)
    ->to('523833570@qq.com')
    ->subject('Test Email from Laravel with Custom HTML')
    ->setBody('<p>阿斯顿发生</p><p>阿萨撒点</p>', 'text/html'); // 设置自定义 HTML 内容
    });
    Log::info('成功了');
} catch (\Exception $e) {
    Log::error('Mail send failed: ' . $e->getMessage());
}
MAIL_MAILER_all=smtp
MAIL_HOST_2="mail.vecelo.com"
MAIL_PORT_2=465
MAIL_USERNAME_2="devcommon@vecelo.com"
MAIL_PASSWORD_2="不告诉你"
MAIL_ENCRYPTION_2="SSL"

环境:php7.4,而且确定命令行php版本和nginx通讯的php-fpm的版本都是7.4

问题:devcommon@vecelo.com是国外的一个邮件服务地址,同样的代码在Controller中http请求可以发成功;在Commands中写一个脚本,通过php artisan命令执行,代码执行到打印日志“成功了”但是QQ邮箱就没收到邮件,检查了垃圾箱也没有,也没有配置什么拒收规则

个人排查结果:尝试了php artisan命令执行中也加载到了env以及config的东西;没有启用laravel相关的缓存;相同的代码能执行成功证明代码应该没错;网上有人说QQ邮箱有什么针对CLI的校验,判断如果是CLI就屏蔽,但是没有方式证实是不是哪个问题。其实我就是想写成异步Job发送,但是就是不成功,后来才发现是在php artisan命令中发不成功

本作品采用《CC 协议》,转载必须注明作者和本文链接
附言 1  ·  2个月前

感谢各位大佬的帮忙,问题解决了,原因是CLI中$_SERVER['SERVER_NAME']为127.0.0.1,HTTP请求中的为请求域名。我在本次执行job中加入如下代码就好了
$_SERVER['SERVER_NAME'] = preg_replace('~^https?://~', '', config('app.url')); // 兼容CLI命令行发送邮件问题,不然SERVER_NAME为127.0.0.1

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 16

换国外邮箱测试,大概率是被某个环节被拦截了

2个月前 评论
若只如初见 (楼主) 2个月前

CLI 的响应日志呢

2个月前 评论
若只如初见 (楼主) 2个月前
MArtian (作者) 2个月前
若只如初见 (楼主) 2个月前

在job中使用http请求控制器的路由可行吗

2个月前 评论
若只如初见 (楼主) 2个月前

抓包看一下二者差异呢

2个月前 评论
若只如初见 (楼主) 2个月前

你可以看看 邮箱有没有退信通知,比如:http://129.204.193.183:89/1733190985772.png(站内我传不了图,只能这样了

2个月前 评论
若只如初见 (楼主) 2个月前

环境是宝塔?如果是的话CLI和运行项目的是两个php,cli的扩展有的每有

2个月前 评论
若只如初见 (楼主) 2个月前

用 tinker 命令调试

2个月前 评论

可能fpm和cli用的不是同一个版本的php

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!