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  ·  5个月前

感谢各位大佬的帮忙,问题解决了,原因是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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 16

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

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

CLI 的响应日志呢

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

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

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

抓包看一下二者差异呢

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

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

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

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

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

用 tinker 命令调试

5个月前 评论

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

5个月前 评论

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