Я стараюсь писать код для электронной почты проверить, как этот
Но у меня есть одна проблема, 25 портов не соединиться с любым почтовым сервером
Мой код, как этот
socket_connect() не работает с 25 портом
example.php
<? PHP
требуется («smtp-validate-email.php»);
$ from = '[email protected]'; // для SMTP FROM: < > команда
$ emails = '[email protected]';
$ validator = новый SMTP_Validate_Email ($ emails, $ from);
$ smtp_results = $ validator- > validate();
эхо "<pre>"; print_r ($ smtp_results); выход;
SMTP-Validate-email.php
<? PHP
/*
* Для того, чтобы изменить заголовок лицензии, выберите Лицензионные заголовки в свойствах проекта.
* Для изменения этого файла шаблона выберите команду Инструменты | Шаблоны
* и откройте шаблон в редакторе.
*/
/**
* Описание EmailValidation
*
* @author Harsukh Makwana <[email protected]>
*/
класс EmailValidation
{
общественности $ hellodomain = 'itsolutionstuff.com';
public $ mailfrom = '[email protected]';
public $ rcptto;
public $ mx;
public $ ip;
функция __construct общественности()
{
$ this- > ф = «192.168.2.14' ;
}
общественная функция checkEmail ($ электронной почте = нуль)
{
$ this- > rcptto = $ электронная почта;
$ массив = взорваться («@», $ this- > rcptto);
$ дом = $ массив [1];
, если (getmxrr ($ дом, $ х)) {
$ этом- > х = $ х [Rand (0, граф ($ х) - 1)];
возвращение $ this- > processRange ($ this- > ф);
}
возвращение ложным;
}
частные функции asyncRead ($ носка)
{
$ read_sock = массив ($ носок);
$ write_sock = NULL;
$ except_sock = NULL;
если (socket_select ($ read_sock, $ write_sock, $ except_sock, 5)!= 1) {
возвращение FALSE;
}
$ RET = socket_read ($ носка, 512);
возвращение $ ret;
}
частные функции smtpConnect ($ MTA, $ src_ip)
{
$ носка = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
если ($ носка == FALSE) {
возврата массива (FALSE, то «не может открыть сокет»);
}
если (!socket_bind ($ носка, $ src_ip)) {
возврат массива (FALSE, «не может связываться с Src IP»);
}
$ таймаут = массив («сек» = > 10, «мксек» = > 0);
socket_set_option ($ носка, SOL_SOCKET, SO_RCVTIMEO, $ Тайм-аут);
socket_set_nonblock ($ носка);
var_dump (@socket_connect ($ sock, $ mta, 25)); exit;
@socket_connect ($ sock, $ mta, 25);
$ RET = $ этом- > asyncRead ($ носка);
если ($ RET === FALSE) {
возврата массива (FALSE, «Начальное чтение тайм-аут»);
}
если (! Preg_match ('/^220 /', $ RET)) {// Не хорошее соединение.
возврат массива (FALSE, $ RET);
}
// Теперь сделайте EHLO.
socket_write ($ носка, "HELO". $ This- > hellodomain."\ Г \ п");
$ RET = $ этом- > asyncRead ($ носка);
если ($ RET === FALSE) {
возврата массива (FALSE «EHLO истекло»);
}
если (! Preg_match ('/^250 /', $ RET)) {// Не хороший ответ.
возврат массива (FALSE, $ RET);
}
// Теперь MAIL FROM.
socket_write ($ носка, "MAIL FROM: <" $ этом- > MAILFROM "> \ г \ п"..);
$ RET = $ этом- > asyncRead ($ носка);
если ($ RET === FALSE) {
возврата массива (FALSE «от тайм-аут»);
}
если (! Preg_match («/^250 /», $ RET)) // Не хороший ответ.
возврат массива (FALSE, $ RET);
// Теперь RCPT TO.
socket_write ($ носка, "RCPT TO: <".. $ Этом- > rcptto "> \ г \ п");
$ RET = $ этом- > asyncRead ($ носка);
если ($ RET === FALSE) {
возврата массива (FALSE «RCPT к тайм-аут»);
}
если (! Preg_match («/^250 /», $ RET)) {
// Не хороший ответ.
возврат массива (FALSE, $ RET);
}
// Все хорошо.
socket_close ($ носка);
return array (true, $ ret);
}
частные функции processRange ($ ф)
{
список ($ RET, $ тзд) = $ this- > smtpConnect ($ this- > тх , $ ip);
$ msg = trim ($ msg);
возвращение $ ret;
}}
Выходной
Array ( [[email protected]] => [domains] => Array ( [gmail.com] => Array ( [users] => Array ( [0] => harsukh ) [mxs] => Array ( [gmail-smtp-in.l.google.com] => 5 [alt1.gmail-smtp-in.l.google.com] => 10 [alt2.gmail-smtp-in.l.google.com] => 20 [alt3.gmail-smtp-in.l.google.com] => 30 [alt4.gmail-smtp-in.l.google.com] => 40 [gmail.com] => 0 ) ) ) )
Здесь [email protected] находится а уже существует, но я получаю нулевой ответ
Могу ли я использовать другой порт для почтового сервера?