現在の位置: ホーム> 最新記事一覧> getMXRR関数の一般的な使用方法と手法は何ですか?

getMXRR関数の一般的な使用方法と手法は何ですか?

gitbox 2025-06-12

php中、 getmxrr()一个用于获取指定域名的mx (邮件交换)记录的函数。mx 记录是域名系统( dns

基本用法

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记录服务器的地址。

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

返回值:

  • 如果成功、返回、 true 、并且$ mxhosts$ weigh

  • 如果失败、返回、 false 、并且$mxhosts$ weight数组将为空。

示例代码:

 <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

常见技巧与应用

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()函数依赖于dnsdns服务器出现问题、可能会导致查询失败。

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

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

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

总结

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