在 CentOS 上打开 smtp 端口 465 时出现问题

在 CentOS 上打开 smtp 端口 465 时出现问题

我在用着php邮件发送器使用 Google 应用地址/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

但是我仍然收到来自 phpMailer 的调试信息“无法连接到服务器:权限被拒绝”。据我所知,这通常表示端口已关闭,&显然确实如此。

关于如何进一步调试,有什么提示吗?任何帮助都将不胜感激。

如果有帮助的话,这里是 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);

*编辑:邮件程序在开发服务器上完美运行 - 有什么建议可以比较不同之处吗?相同的操作系统,相同的 php... 我被难住了!

答案1

你已经告诉服务器接受传入端口 465 上的连接,但你还告诉它连接到 smtp.gmail.com,这是一个出站联系。

您需要打开相同的端口,但是在 OUTPUT 链上而不是 INPUT 链上:

-A OUTPUT -p tcp --dport 465 -j ACCEPT

要从终端编辑,命令如下:

iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT

答案2

防火墙问题应该导致“连接已重置”或“连接超时”错误消息。PHPMailer可能会给你一个“权限被拒绝”的错误信息,而不是上述两个错误信息中的一个,但那将是一个错误信息(这不是我第一次看到糟糕的错误消息。)

如果错误消息“无法连接到服务器:权限被拒绝”有帮助,则表明您已safe_mode打开或不允许在您的中打开套接字php.ini

这也可能是由 SELinux 引起的。我对它不够熟悉,无法告诉您该怎么做才能确定是否是这种情况或如何修复它。

相关内容