我正在使用phpMailer发送购买确认使用谷歌应用程序地址/ smtp。 整个事情在开发盒上工作的很好,但是现在它已经开始运行了,似乎我使用的端口(465)被阻塞了。
所以我编辑iptables:
-A INPUT -p tcp -dport 465 -j ACCEPT -A INPUT -p tcp -sport 465 -j ACCEPT
我的理解是,这允许入站和出站连接465(纠正我,如果我错了)。 重新启动iptables后:
iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:465 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:465
但是,我仍然收到“无法连接到服务器:权限被拒绝”从phpMailerdebugging。 从我读到的,这通常表明,港口是封闭的, 显然是这样的。
任何提示如何进一步debugging? 任何帮助将不胜感激。
如果有帮助,这里的PHP:
$mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 1; //!DEV $mail->SMTPAuth = true; $mail->SMTPSecure = 'ssl'; $mail->Host = 'smtp.gmail.com'; $mail->Port = 465; $mail->Username = $emailAddress; $mail->Password = $emailPassword; $mail->SetFrom($emailAddress, 'PURCHASE ORDER'); $mail->AddAddress($customerEmail); $mail->AddAddress($salesEmail); $mail->Subject = $subject; $mail->Body = $body; $mail->Send() or die('Error: ' . $mail->ErrorInfo);
*编辑:邮件程序完美地在开发服务器上工作 – 任何关于如何比较可能不同的build议? 相同的操作系统,相同的PHP …我很难过!
你已经告诉你的服务器接受端口465上的传入连接,但是你也告诉它连接到smtp.gmail.com这是一个出站连接。
您将需要打开相同的端口,但在OUTPUT链上而不是INPUT端口上:
-A OUTPUT -p tcp -dport 465 -j ACCEPT
防火墙问题应导致“连接已重置”或“连接超时”错误消息。 PHPMailer 可能会给你一个“权限被拒绝”的错误信息,而不是这两个中的一个,但这将是一个错误的错误信息 。 (这不会是我第一次看到坏的错误信息。)
如果错误消息“无法连接到服务器:权限被拒绝”是有帮助的,它表明您已经safe_mode
或您已经不允许打开您的php.ini
套接字。
这也可能是由SELinux造成的。 我不是很熟悉,告诉你该怎么做,以确定是否是这种情况或解决这个问题。