如何在Laravel项目中找到php.ini文件解决SMTP邮件发送报错问题
报错原因
mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
这个报错是PHP原生mail()函数调用时,检测到本地25端口没有运行可用的SMTP邮件服务导致,绝大多数本地开发环境默认不会预装SMTP服务,因此会触发该错误。
解决方案
方案1:使用Laravel内置邮件功能(推荐,无需修改php.ini)
Laravel本身封装了完善的邮件发送体系,不需要调用原生mail()函数,仅需修改根目录下的.env配置文件即可:
- 本地开发测试场景:建议直接使用
log驱动,所有发出的邮件会自动写入storage/logs目录的日志文件中,无需搭建SMTP服务,配置参考:
MAIL_MAILER=log MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="test@example.com" MAIL_FROM_NAME="${APP_NAME}"
- 线上真实发信场景:直接填入第三方邮件服务商提供的SMTP配置即可,比如QQ邮箱、163邮箱、企业邮的SMTP地址、端口、授权码等参数。
方案2:查找并修改php.ini配置
如果确实需要使用原生mail()函数,可按以下方式找到当前环境生效的php.ini文件:
集成环境(XAMPP/WAMP/MAMP)
- XAMPP:打开XAMPP控制面板,点击Apache模块对应的「Config」按钮,直接选择
PHP(php.ini)即可打开配置文件 - WAMP:点击右下角系统托盘的WAMP图标,展开PHP菜单,直接点击
php.ini即可打开 - MAMP:打开MAMP偏好设置,切换到PHP标签页,即可看到当前php.ini的存放路径
自定义环境/服务器环境
- 在项目
public目录下新建phpinfo.php文件,写入内容:<?php phpinfo(); ?> - 浏览器访问该文件(地址如
http://本地项目域名/phpinfo.php),在页面中搜索Loaded Configuration File字段,后方的路径就是当前生效的php.ini绝对路径 - 修改完配置后记得删除
phpinfo.php文件,避免泄露环境敏感信息
注意事项
- 修改php.ini配置后,需要重启对应的Web服务(Apache/Nginx/php-fpm)才会生效
- 若本地没有搭建SMTP服务,仅修改php.ini的SMTP配置仍然会触发报错,优先推荐使用Laravel内置邮件功能处理发信需求
内容的提问来源于stack exchange,提问作者user16945874
相关产品推荐
相关产品推荐

