【发布时间】:2015-12-25 22:38:12
【问题描述】:
目标是使用 PHP 通过 SMTP 从我的共享主机向 Mandrill 发送出站电子邮件,我与主机系统管理员有充分的合作。
目前情况:
- ✅ PHP 可以连接到 smtp.mandrillapp.com 端口 443(用于 HTTPS)
- ❌ PHP 无法连接到 smtp.mandrillapp.com 端口 587(用于 SMTP)
- ✅ PHP 可以连接到 portquiz.net 端口 443(用于 HTTPS)
- ❌ PHP 无法连接到 portquiz.net 端口 587(用于 SMTP)
- ✅ Telnet 可以连接到 smtp.mandrillapp.com 端口 443
- ✅ Telnet 可以连接到 smtp.mandrillapp.com 端口 587
Telnet 由他们以 root 登录并运行 telnet HOST PORT 进行测试。使用下面的脚本测试 PHP。
PHP 的哪个配置选项可能会导致端口 587 上的出站连接被阻止?我们如何才能扭转这种配置?
<?php
// Test outbound server connections
// https://mandrill.zendesk.com/hc/en-us/articles/205582167-What-SMTP-ports-can-I-use-
$servers = array(
array("ssl://www.google.com", 443),
array("ssl://smtp.mandrillapp.com", 465),
array("smtp.mandrillapp.com", 25),
array("smtp.mandrillapp.com", 587),
array("smtp.mandrillapp.com", 2525),
array("smtp.mandrillapp.com", 443)
);
foreach ($servers as $server) {
list($server, $port) = $server;
echo "<h1>Attempting connect to <tt>$server:$port</tt></h1>\n";
flush();
$socket = fsockopen($server, $port, &$errno, &$errstr, 10);
if(!$socket) {
echo "<p>ERROR: $server:$portsmtp - $errstr ($errno)</p>\n";
} else {
echo "<p>SUCCESS: $server:$port - ok</p>\n";
}
flush();
}
?>
【问题讨论】:
-
错误编号是多少?
-
你有一张支票到了 587 端口。它没有被阻止出去。您实际上并没有检查端口 586 上的任何内容。
-
@JasonK 谢谢,我已经更新了这个问题中的 586/587 错字
-
@PrestonS 错误是:警告:fsockopen() [function.fsockopen]:无法连接到 /home/heroanswers/ 中的 ssl://smtp.mandrillapp.com:465(连接超时) public_html/smtptest.php 第 22 行错误:ssl://smtp.mandrillapp.com: - 连接超时 (110)
-
@FullDecent 错误消息不是针对相关端口的,端口 587 的错误是什么?