Проверка записи MX с помощью getmxrr() или dns_get_record() возвращает неверную информацию

В настоящее время я пытаюсь проверить действительность адреса электронной почты, сначала проверив, существует ли запись MX, используя getmxrr() или же dns_get_record() с PHP 7 на капле DigitalOcean.

В моем примере (который возвращает неправильный ответ) я пытаюсь проверить адрес электронной почты в домене "nuwatches.com". С помощью dns_get_record(”nuwatches.com”, DNS_ALL)Мне возвращается массив, который содержит запись MX, хотя я знаю, что в действительности этого не существует:

[5] => Array (
    [host] => nuwatches.com.com
    [class] => IN
    [ttl] => 27
    [type] => MX
    [pri] => 1
    [target] => mail.user-mail.net
)

Однако, если я использую nslookup прямо из консоли на дроплете DigitalOcean мне правильно сказали, что записи MX не существует.

Кроме того, если я запускаю dns_get_record() функция на другой дроплет, или используя бегун PHP-кода онлайн, мне также дают правильный ответ (то есть, что записи MX не существует).

Я поговорил со службой поддержки DigitalOcean, и они предполагают, что с PHP происходит что-то странное с этой конкретной капелькой, возможно, с проблемами кэширования, но я никак не могу понять, что может быть причиной несоответствия, тем более что я ничего не кэширую себя.

В настоящее время мой единственный вариант, чтобы получить правильный ответ на эту капельку, это запустить nslookup а потом разбирать результат, но я бы хотел использовать dns_get_record() если возможно.

Буду признателен за любые предложения. Спасибо!

2 ответа

у меня похожие проблемы сdns_get_record()при вызове его со значением по умолчанию для типа записиDNS_ANYили при вызове с помощьюDNS_ALL.

php dns_get_records(host, type) возвращает false с type=DNS_ALL, но возвращает записи DNS с DNS_TXT или DNS_A

Решение, которое сработало для меня, заключалось в использовании:

      dns_get_record( ”nuwatches.com”, DNS_MX )

Я все еще исследую причину такого поведения.

Для этого вы можете попробовать использовать стороннюю PHP-библиотеку. Я только что проверил это, и это сработало для меня.

bluelibraries/dns

образец

      use BlueLibraries\Dns\Facade\DNS;
use BlueLibraries\Dns\Records\RecordTypes;

$records = DNS::getRecords('nuwatches.com', RecordTypes::MX);

print_r($records);

результат

      Array
(
    [0] => BlueLibraries\Dns\Records\Types\MX Object
        (
            [data:protected] => Array
                (
                    [host] => nuwatches.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => MX
                    [pri] => 1
                    [target] => localhost
                )

        )

)
Другие вопросы по тегам