php 使用getmxrr()或dns_get_record()检查MX记录返回错误信息

wkyowqbh  于 2023-02-18  发布在  PHP
关注(0)|答案(2)|浏览(158)

我目前正在尝试检查电子邮件地址的有效性,首先检查MX记录是否存在,使用getmxrr()dns_get_record()与PHP7对DigitalOcean droplet。
在我的示例中(返回了错误的响应),我试图检查域“www.example.com“上的电子邮件地址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
)

然而,如果我直接从DigitalOcean droplet上的控制台使用nslookup,我会被正确地告知不存在MX记录。
此外,如果我在不同的droplet上运行dns_get_record()函数,或者使用在线PHP代码运行程序,我也会得到正确的答案(即不存在MX记录)。
我已经和DigitalOcean支持人员谈过了,他们建议PHP在那个特定的小滴上发生了一些奇怪的事情,也许是缓存问题,但是我根本不知道是什么导致了这种差异,特别是我自己没有缓存任何东西。
就目前情况而言,要在这个微滴上获得正确的响应,唯一的选择是运行nslookup,然后解析结果,但如果可能的话,我希望使用dns_get_record()
我很感激任何建议。谢谢!

t9aqgxwy

t9aqgxwy1#

当使用记录类型DNS_ANY的默认值调用dns_get_record()或使用DNS_ALL调用dns_get_record()时,我遇到了类似的问题。
php dns_get_records( host, type ) is returning false with type=DNS_ALL but returns DNS records with DNS_TXT or DNS_A
对我有效的解决方案是用途:

dns_get_record( ”nuwatches.com”, DNS_MX )

我仍在调查这种行为背后的原因。

2hh7jdfx

2hh7jdfx2#

你可以试着用第三方PHP库来做这个,我刚刚测试过,它对我很有效。

    • 一个

样品

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
                )

        )

)

相关问题