Laravel配置Postfix发送邮件遇Swift_TransportException,求正确配置
解决Laravel中Postfix仅发送配置问题
首先,你之前用SMTP驱动连接G Suite没问题,但Postfix作为本地仅发送服务时,其实用sendmail驱动会更适配——因为Postfix默认提供了sendmail兼容的执行文件,不需要走SMTP端口连接。当然如果坚持用SMTP驱动也可以,下面分别给出两种正确配置方式:
方式一:使用Sendmail驱动(推荐)
修改你的.env文件为以下内容:
MAIL_MAILER=sendmail MAIL_SENDMAIL_PATH='/usr/sbin/sendmail -t -i'
注意:Laravel 6+版本把
MAIL_DRIVER改成了MAIL_MAILER,如果你的Laravel版本低于6,还是用MAIL_DRIVER=sendmail。sendmail的路径可以用which sendmail命令确认,通常就是/usr/sbin/sendmail。
配置完成后,一定要清除Laravel的配置缓存,避免旧配置干扰:
php artisan config:clear
方式二:使用SMTP驱动连接本地Postfix
如果你还是想用SMTP驱动,需要确保Postfix正在监听localhost:25,并且允许本地连接。修改.env配置如下:
MAIL_MAILER=smtp MAIL_HOST=127.0.0.1 MAIL_PORT=25 MAIL_USERNAME= MAIL_PASSWORD= MAIL_ENCRYPTION= MAIL_FROM_ADDRESS=your-valid-email@your-domain.com MAIL_FROM_NAME="${APP_NAME}"
这里把
MAIL_HOST改成127.0.0.1而非localhost,避免DNS解析问题导致连接失败;MAIL_ENCRYPTION留空或设为false,因为本地25端口默认不加密;用户名和密码留空即可,本地Postfix允许免认证的本地连接。
同样,配置后要清除配置缓存:
php artisan config:clear
额外排查步骤
如果还是报错,可以做以下检查:
- 确认Postfix正在运行:
sudo systemctl status postfix - 确认Postfix监听127.0.0.1:25:
ss -tulpn | grep :25,应该能看到postfix进程监听127.0.0.1:25 - 测试本地SMTP连接:用
telnet 127.0.0.1 25或者nc 127.0.0.1 25,如果能看到220开头的欢迎信息,说明端口是通的
内容的提问来源于stack exchange,提问作者Marco Vinicius Castellari
相关产品推荐
相关产品推荐

