在 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> &</span><span><span class="hljs-variable">$mxhosts</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &</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"><?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> => </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">?></span></span><span>
</span></span>
在上面的代码中 , getmxrr ()会获取example.com域名的 mx 记录 , 并将其存储在$ mxhosts和$ poids数组中。然后 , 遍历输出每个邮件服务器的地址和其对应的权重。
通过getmxrr ()函数 , 开发者可以验证一个域名是否配置了邮件服务器 , 从而判断该域名是否能够接收邮件。如果获取到的 mx 记录不为空 , 则说明该域名能够接收邮件。
<span><span><span class="hljs-meta"><?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">// 有MX记录,表示可以接收邮件</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">// 无MX记录,表示不可接收邮件</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> 可以接收邮件\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> 无法接收邮件\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
根据 mx 记录的权重值 , 优先级较低的服务器会被优先使用。通过getmxrr ()获取的权重数组 , 可以帮助开发者找到优先级最高的邮件服务器。
<span><span><span class="hljs-meta"><?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">"最优的邮件服务器是: <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">"无法找到邮件服务器\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
此代码会根据权重数组的最小值 (即优先级最高的服务器) 来找出最优的邮件服务器。
在某些情况下 , 开发者可能只对某些特定的邮件服务器感兴趣 , 比如选择一个特定区域的邮件服务器或特定类型的服务器。可以在获取 MX 记录后 , 通过简单的数组过滤来实现这一需求。
<span><span><span class="hljs-meta"><?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">// 过滤出包含指定字符串的邮件服务器</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">"过滤后的邮件服务器:\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">"未找到符合条件的邮件服务器\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
在这个示例中 , filtermailServers ()函数会过滤出所有包含gmail字符串的邮件服务器。
Dns 查询限制: getmxrr ()函数依赖于 dns 查询的正确性和稳定性。如果 dns 服务器出现问题 , 可能会导致查询失败。
结果顺序: getmxrr ()返回的 mx 记录是按照优先级顺序排列的 , 优先级较低的服务器会出现在前面 (即更高优先级))。
非标准返回值: 在某些情况下 , 如果域名没有配置 MX 记录 , 函数返回FAUX 。此时需要合理处理错误情况。
安全性: 尽管getmxrr ()是一个常用的 dns 查询工具 , 但在公 但在公 环境中使用时 , 开发者应该注意避免信息泄露 , 特别是当暴露在外部系统时。
getmxrr ()是 php 中一个简单但功能强大的函数 , 适用于各种需要获取和操作 mx 记录的场景。无论是进行邮件验证、寻找最优邮件服务器 , 还是实现邮件路由策略 , getmxrr ()都能够提供重要的帮助。通过合理使用它 , 可以在邮件系统的搭建和维护中提高效率。