Press "Enter" to skip to content

PHPMailer线上无法通过25端口发送邮件问题

https://blog.csdn.net/kunpeng1987/article/details/78494256

最近在做一个项目,其中有用到PHPmailer来发送邮件,在本地测试好后,上传到线上,邮件发送失败。用的是SMTP协议,本地用的是wamp环境,线上用的是lamp环境。于是就进行一系列的排查。
排查过程
这种方式首先PHP要开启sockets扩展,以及openssl。
1、查看php扩展

#php -m

发现是开启的
这里写图片描述

2、 然后打开php.ini,查看allow_url_fopen

allow_url_fopen = On

没问题,是开启的。再查看是不是禁用函数了

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

fsockopen ()和pfsockopen()以及stream_socket_client()函数并没有被禁用。

3、查看防火墙

#sestatus -b | grep httpd

查看httpd_can_sendmail与是不是打开的,没有的话用命令打开

setsebool -P httpd_can_sendmail on
setsebool -P httpd_can_network_connect on

4、接着排查端口是不是被占用了,因为SMTP的默认端口是25。
这里写图片描述

端口被占用了,既然25端口不可用,于是我想,是否可以尝试一下其它端口,用465端口试试。
465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露。
修改程序如下,

$mail = new PHPMailer();
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

执行,发送邮件成功!终于解决了,特记录一下。

发表评论