Position actuelle: Accueil> Derniers articles> Quelles sont les méthodes et techniques d'utilisation courantes pour la fonction GETMXRR?

Quelles sont les méthodes et techniques d'utilisation courantes pour la fonction GETMXRR?

gitbox 2025-06-12

在 php 中 , getmxrr ()是一个用于获取指定域名的 mx (邮件交换) 记录的函数。mx 记录是域名系统 (dns) 中的一项记录类型 , 指定了负责接收邮件的邮件服务器。通过getmxrr ()函数 , 开发者可以轻松地获取某个域名的 mx 记录 , 以便进行邮件相关的操作 , 比如验证域名是否可以接收邮件 , 或是根据 mx 记录进行邮件路由等。

基本用法

getmxrr () :

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$mxhosts</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$weight</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ] )
</span></span>

  • $ hostname : 指定要查询的域名。

  • $ MXHOSTS : : 一个数组 , 返回 MX 记录服务器的地址。

  • $ poids (可选) : 返回的数组 , 用于存储对应 MX 服务器的权重 (优先级)) 。权重较低的服务器具有较高的优先级。

  • 如果成功 , 返回Vrai , 并且$ mxhosts$ poids将分别存储服务器地址和权重。

  • 如果失败 , 返回FAUX , 并且$ mxhosts$ poids数组将为空。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$hostname</span></span><span> = </span><span><span class="hljs-string">"example.com"</span></span><span>;
</span><span><span class="hljs-variable">$mxhosts</span></span><span> = [];
</span><span><span class="hljs-variable">$weight</span></span><span> = [];

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span>(</span><span><span class="hljs-variable">$hostname</span></span><span>, </span><span><span class="hljs-variable">$mxhosts</span></span><span>, </span><span><span class="hljs-variable">$weight</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"MX Records for <span class="hljs-subst">$hostname</span></span></span><span>:\n";
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$mxhosts</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> =&gt; </span><span><span class="hljs-variable">$host</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$host</span></span></span><span>, Weight: " . </span><span><span class="hljs-variable">$weight</span></span><span>[</span><span><span class="hljs-variable">$index</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Failed to retrieve MX records for <span class="hljs-subst">$hostname</span></span></span><span>.\n";
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在上面的代码中 , getmxrr ()会获取example.com域名的 mx 记录 , 并将其存储在$ mxhosts$ poids数组中。然后 , 遍历输出每个邮件服务器的地址和其对应的权重。

常见技巧与应用

1. 验证域名是否可接收邮件

通过getmxrr ()函数 , 开发者可以验证一个域名是否配置了邮件服务器 , 从而判断该域名是否能够接收邮件。如果获取到的 mx 记录不为空 , 则说明该域名能够接收邮件。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isMailServerAvailable</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>) {
    </span><span><span class="hljs-variable">$mxhosts</span></span><span> = [];
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-variable">$mxhosts</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;  </span><span><span class="hljs-comment">// &#26377;MX&#35760;&#24405;&#65292;&#34920;&#31034;&#21487;&#20197;&#25509;&#25910;&#37038;&#20214;</span></span><span>
    }
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;  </span><span><span class="hljs-comment">// &#26080;MX&#35760;&#24405;&#65292;&#34920;&#31034;&#19981;&#21487;&#25509;&#25910;&#37038;&#20214;</span></span><span>
}

</span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-string">"example.com"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">isMailServerAvailable</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$domain</span></span></span><span> &#21487;&#20197;&#25509;&#25910;&#37038;&#20214;\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$domain</span></span></span><span> &#26080;&#27861;&#25509;&#25910;&#37038;&#20214;\n";
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

2. 查找最优的邮件服务器

根据 mx 记录的权重值 , 优先级较低的服务器会被优先使用。通过getmxrr ()获取的权重数组 , 可以帮助开发者找到优先级最高的邮件服务器。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getBestMailServer</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>) {
    </span><span><span class="hljs-variable">$mxhosts</span></span><span> = [];
    </span><span><span class="hljs-variable">$weights</span></span><span> = [];
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-variable">$mxhosts</span></span><span>, </span><span><span class="hljs-variable">$weights</span></span><span>)) {
        </span><span><span class="hljs-variable">$bestServerIndex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_search</span></span><span>(</span><span><span class="hljs-title function_ invoke__">min</span></span><span>(</span><span><span class="hljs-variable">$weights</span></span><span>), </span><span><span class="hljs-variable">$weights</span></span><span>);
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$mxhosts</span></span><span>[</span><span><span class="hljs-variable">$bestServerIndex</span></span><span>];
    }
    
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">null</span></span><span>;
}

</span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-string">"example.com"</span></span><span>;
</span><span><span class="hljs-variable">$bestServer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getBestMailServer</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$bestServer</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#26368;&#20248;&#30340;&#37038;&#20214;&#26381;&#21153;&#22120;&#26159;: <span class="hljs-subst">$bestServer</span></span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#26080;&#27861;&#25214;&#21040;&#37038;&#20214;&#26381;&#21153;&#22120;\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

此代码会根据权重数组的最小值 (即优先级最高的服务器) 来找出最优的邮件服务器。

3. 过滤和选择特定的邮件服务器

在某些情况下 , 开发者可能只对某些特定的邮件服务器感兴趣 , 比如选择一个特定区域的邮件服务器或特定类型的服务器。可以在获取 MX 记录后 , 通过简单的数组过滤来实现这一需求。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">filterMailServers</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>, </span><span><span class="hljs-variable">$filter</span></span><span>) {
    </span><span><span class="hljs-variable">$mxhosts</span></span><span> = [];
    </span><span><span class="hljs-variable">$weights</span></span><span> = [];
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-variable">$mxhosts</span></span><span>, </span><span><span class="hljs-variable">$weights</span></span><span>)) {
        </span><span><span class="hljs-variable">$filteredHosts</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$mxhosts</span></span><span>, function(</span><span><span class="hljs-variable">$host</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">filter</span></span><span>) {
            </span><span><span class="hljs-title">return</span></span><span> </span><span><span class="hljs-title">strpos</span></span><span>($</span><span><span class="hljs-title">host</span></span><span>, $</span><span><span class="hljs-title">filter</span></span><span>) !== </span><span><span class="hljs-title">false</span></span><span>;  </span><span><span class="hljs-comment">// &#36807;&#28388;&#20986;&#21253;&#21547;&#25351;&#23450;&#23383;&#31526;&#20018;&#30340;&#37038;&#20214;&#26381;&#21153;&#22120;</span></span><span>
        });
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$filteredHosts</span></span><span>;
    }
    
    </span><span><span class="hljs-keyword">return</span></span><span> [];
}

</span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-string">"example.com"</span></span><span>;
</span><span><span class="hljs-variable">$filteredServers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filterMailServers</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-string">"gmail"</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$filteredServers</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#36807;&#28388;&#21518;&#30340;&#37038;&#20214;&#26381;&#21153;&#22120;:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$filteredServers</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$server</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$server</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#26410;&#25214;&#21040;&#31526;&#21512;&#26465;&#20214;&#30340;&#37038;&#20214;&#26381;&#21153;&#22120;\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个示例中 , filtermailServers ()函数会过滤出所有包含gmail字符串的邮件服务器。

注意事项

  1. Dns 查询限制getmxrr ()函数依赖于 dns 查询的正确性和稳定性。如果 dns 服务器出现问题 , 可能会导致查询失败。

  2. 结果顺序: getmxrr ()返回的 mx 记录是按照优先级顺序排列的 , 优先级较低的服务器会出现在前面 (即更高优先级))。

  3. 非标准返回值: 在某些情况下 , 如果域名没有配置 MX 记录 , 函数返回FAUX 。此时需要合理处理错误情况。

  4. 安全性: 尽管getmxrr ()是一个常用的 dns 查询工具 , 但在公 但在公 环境中使用时 , 开发者应该注意避免信息泄露 , 特别是当暴露在外部系统时。

总结

getmxrr ()是 php 中一个简单但功能强大的函数 , 适用于各种需要获取和操作 mx 记录的场景。无论是进行邮件验证、寻找最优邮件服务器 , 还是实现邮件路由策略 , getmxrr ()都能够提供重要的帮助。通过合理使用它 , 可以在邮件系统的搭建和维护中提高效率。