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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 16

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

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

CLI 的响应日志呢

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

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

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

抓包看一下二者差异呢

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

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

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

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

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

用 tinker 命令调试

4个月前 评论

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

4个月前 评论