海外服务器实现php网站调用smtp发送用户注册验证邮件
太折腾了,原来海外云服务器装了centos7+后还得安装邮件服务....给客户朋友做了个英文企业网站,需要用到注册用户邮箱验证功能,海外用户一般用gmail,那怎么实现Gmail能收到邮件呢?
网站是php语言的网站,因此用的是phpmailer的smtp功能,海外服务器装了centos7.0和海外版宝塔后,部署网站发现注册用户验证邮件一直无法发出去,提示“Mail delivery failed, please try again”,一直排查没发现原因。
然后想着是不是这centos7.0缺了啥,查了下,果然,mailx和postfix默认没装...
于是在宝塔上分别安装:
sudo yum install postfix
启动:
systemctl start postfix
systemctl enable postfix
继续安装:
sudo yum install mailx -y
安装好后,重启了下测试,用国内邮箱如qq、163等可以正常收到验证邮件了,但gmail还是无法收到,原因是qq邮箱收到的邮件显示为xxx主机代发,因此被gmail拒收了......

继续排查...
25端口是开了的;邮箱用的企业邮箱的smtp,在别的海外虚拟主机gmail正常接收验证邮件,为何放到centos7上就不行了呢?
使用PHPMailer发送邮件, 可能会出现Permission denied错误,如下:
2016-06-30 04:05:00 Connection: opening to smtp.exmail.qq.com:25, timeout=300, options=array ( ) 2016-06-30 04:05:04 SMTP ERROR: Failed to connect to server: Permission denied (13)
2016-06-30 04:05:04 SMTP connect() failed.
因为selinux拒绝httpd服务发送邮件,可修改selinux的规则。
步骤如下:
1、使用下面的命令查看selinux的权限。
$ getsebool httpd_can_sendmail
httpd_can_sendmail --> off
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> off
2、再使用下面的命令允许httpd发送邮件,问题得以解决!
$ setsebool -P httpd_can_sendmail 1
$ setsebool -P httpd_can_network_connect 1
修改了,也还是不行........
按这个方法,改smtp为SMTP也不行:https://blog.csdn.net/numcap1/article/details/82936568
最后找大佬排查了下,是sendmail函数调用问题,搞定了,记录一下。
链接:https://www.jin-you.com/news/1243.html
