Home >Backend Development >PHP Tutorial >Linux下phpmailer发送邮件失败怎么解决?

Linux下phpmailer发送邮件失败怎么解决?

PHPz
PHPzOriginal
2016-06-13 11:20:312118browse

解决方法:1、开启sockets和openssl扩展;2、打开php.ini,设置“allow_url_fopen=On”;3、查看防火墙,开启httpd_can_sendmail;4、查看25端口是否被占用,如果被占用则换成465端口。

Linux下phpmailer发送邮件失败怎么解决?

Linux服务器下PHPMailer发送邮件失败问题的解决

最近在做一个项目,其中有用到PHPmailer来发送邮件,在本地测试好后,上传到线上,邮件发送失败。用的是SMTP协议,本地用的是wamp环境,线上用的是lamp环境。于是就进行一系列的排查。

排查过程

这种方式首先PHP要开启sockets扩展,以及openssl。

1、查看php扩展

#php -m

发现是开启的

1.png

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 onsetsebool -P httpd_can_network_connect on

4、接着排查端口是不是被占用了,因为SMTP的默认端口是25。

2.png

端口被占用了,既然25端口不可用,于是我想,是否可以尝试一下其它端口,用465端口试试。

465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露。

修改程序如下,

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

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

更多相关知识,请访问 PHP中文网!!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn