【发布时间】:2017-09-13 15:43:30
【问题描述】:
我正在尝试使用 PHP 连接几个 smtp 主机(yahoo、mail、gmail 等),并检查响应。
更准确地说 - 来自特定主机的绑定 IP 超时。
请注意,我没有检查主 IP 是否能够访问 SMTP 主机,我需要检查 IP 是否绑定在接口上。
我能够连接到套接字并绑定 IP,但我没有得到任何输出。 这是我的代码:
<?php
function error() {
$strerr = socket_last_error();
$strmsg = socket_strerror($strerr);
return $strmsg;
}
$ip = $argv[1];
$port = 25;
$hosts = array(
"smtp.gmail.com",
"mailin-01.mx.aol.com",
"mx2.hotmail.com",
"mta7.am0.yahoodns.net"
);
$host = "smtp.gmail.com";
foreach ($hosts as $key) {
if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) {
echo error();
}
if (!socket_bind($sock, $ip)) {
echo "Unable to bind to specific IP.";
}
//Check can we connect to the socket
if (!socket_connect($sock, $key, $port)) {
echo error() . "\n";
}
else {
if (socket_recv($sock, $buf, 150, MSG_PEEK) === FALSE) {
echo error() . "\n";
}
echo $buf;
}
socket_shutdown($sock);
socket_close($sock);
}
我正在从 cli 运行脚本。
【问题讨论】: