内容详情 您现在的位置是: 首页> PHP
PHPMailer发送邮件失败
发布时间:2020-10-10 18:34 已围观:1336
摘要Linux服务器下PHPMailer发送邮件失败的问题解决
首先PHP要开启sockets拓展,查了一下phpinfo页面,是开启的:
再看一下allow_url_fopen:
是不是禁用了函数:
是不是端口被占用了?
运行一下:netstat -tnlp
25端口被占用
用我们这个邮件服务器去发邮件,放了一小段测试代码到PHPMailer目录同级下:
require 'PHPMailer/class.phpmailer.php';
try {
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet='UTF-8';
$mail->SMTPAuth = true;
$mail->Port = 25;
$mail->Host = '127.0.0.1';
//邮箱smtp地址
$mail->Username = '123@qq.com';
//你的邮箱账号
$mail->Password = '123';
//你的邮箱密码 $mail->From = '123@qq.com';
//你的邮箱账号 $mail->FromName = 'json';
$to = "123@qq.com";
$mail->AddAddress($to);
$mail->Subject = "test";
$mail->Body = 'hello!';
$mail->WordWrap = 80;
$mail->IsHTML(true);
$mail->Send();
echo "success!";
} catch (phpmailerException $e) {
echo "邮件发送失败:".$e->errorMessage();
}
通过25端口的本地服务器发送邮件,没办法连接到SMTP。那我们把25端口的postfix服务器杀掉, 执行kill 1818(当前postfix的PID),再执行一次,还是同样错误,无法连接上。这就奇了怪了,25端口没有程序运行了,还不行。
既然25端口不可用,于是我想,是否可以尝试一下其它端口,用465端口试试。
sbin/iptables -I OUTPUT -p tcp –dport 465 -j ACCEPT 打通465端口
/etc/rc.d/init.d/iptables save 保存
service iptables restart 重启
/etc/init.d/iptables status 查看需要打开的端口是否生效?
似乎可行,现在尝试一下,用SMTP的465SSL连接方式来发送邮件,稍微改了一下测试代码:
require 'PHPMailer/class.phpmailer.php';
try {
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet='UTF-8';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Host = 'smtp.mxhichina.com';
//邮箱smtp地址
$mail->Username = '123@qq.com';
//你的邮箱账号
$mail->Password = '123';
//你的邮箱密码
$mail->From = '123@qq.com';
//你的邮箱账号
$mail->FromName = '123';
$to = "123@qq.com";
$mail->AddAddress($to);
$mail->Subject = "test";
$mail->Body = 'hello!';
$mail->WordWrap = 80;
//$mail->AddAttachment("f:/test.png");
//可以添加附件
$mail->IsHTML(true);
$mail->Send();
echo "success!";
} catch (phpmailerException $e) {
echo "邮件发送失败:".$e->errorMessage();
//测试的时候可以去掉此行的注释
}
执行,成功!
PHPMailer通过465端口进行更安全的SMTPS协议发送邮件
$mail->Port = 465;
为:
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
赞一个 (6)
上一篇: php遍历汉字字符串
下一篇: MySQL 及 SQL 注入与防范方法