~xb1x
Новичок
Здравствуйте!
Есть задача по автоматической актуализации листа почтовой рассылки (не спам разумеется), понимаю как работают smtp-серверы и что мой способ дает погрешность, но все же.
Смысл способа в том, чтобы соединиться с MX-сервером и инициировать передачу команды RCPT TO:, получить ответ и обработать его. Если ответ 250 - записываем в очищенный лист адрес, если нет - ничего не делаем, переходим к следующему адресу. Далее инициируем отправку почты по очищенному листу и автоматически проверяем NDR-письма, которые свалились с тех ящиков, которые попали в этот список. Этап с обработкой RCPT TO: связан с минимизацией количества NDR-ов.
Проблема в том, что некоторые серверы очень долго висят перед тем как ответить на RCPT TO:, мне бы хотелось не ждать ответа от них в случае, если соединение длится более n-секунд таймаута и перейти к следующему адресу. Знаю, что новый cURL умеет SMTP, но там не возможно управлять соединением, т.е. после RCPT TO: сразу посылается DATA, да и cURL новый не везде. Помогите разрешить проблему или подскажите куда копать.
Есть задача по автоматической актуализации листа почтовой рассылки (не спам разумеется), понимаю как работают smtp-серверы и что мой способ дает погрешность, но все же.
Смысл способа в том, чтобы соединиться с MX-сервером и инициировать передачу команды RCPT TO:, получить ответ и обработать его. Если ответ 250 - записываем в очищенный лист адрес, если нет - ничего не делаем, переходим к следующему адресу. Далее инициируем отправку почты по очищенному листу и автоматически проверяем NDR-письма, которые свалились с тех ящиков, которые попали в этот список. Этап с обработкой RCPT TO: связан с минимизацией количества NDR-ов.
Проблема в том, что некоторые серверы очень долго висят перед тем как ответить на RCPT TO:, мне бы хотелось не ждать ответа от них в случае, если соединение длится более n-секунд таймаута и перейти к следующему адресу. Знаю, что новый cURL умеет SMTP, но там не возможно управлять соединением, т.е. после RCPT TO: сразу посылается DATA, да и cURL новый не везде. Помогите разрешить проблему или подскажите куда копать.
PHP:
function sWrite( $socket, $data, $echo = false ){
if( $echo ) echo $data;
fputs( $socket, $data );
$answer = fread( $socket, 1 );
$remains = socket_get_status( $socket );
if( $remains --> 0 ) $answer .= fread( $socket, $remains['unread_bytes'] );
return $answer;
}
function easychecker($email) {
$mx = dns_get_record(end(explode("@", $email)), DNS_MX);
$mx = $mx[0]['target'];
$socket = fsockopen($mx, 25, $errno, $errstr, 10);
if( !$socket) {
echo "$errstr ($errno)\n";
} else {
sWrite( $socket, "" );
sWrite( $socket, "EHLO vasyapupkin\r\n" );
sWrite( $socket, "MAIL FROM: <[email protected]>\r\n" );
$response = sWrite( $socket, "RCPT TO: <$email>\r\n" );
sWrite( $socket, "QUIT\r\n" );
fclose( $socket );
if ((substr_count($response, "250") > 0) && (substr_count($response, "OK") > 0)) {
$result = '1';
} else {
$result = '0';
}
}
return $result;
}