PHP getmxrr 函数
最后修改于 2025 年 4 月 4 日
PHP 的 getmxrr 函数用于检索给定主机的 MX 记录。它对于电子邮件服务器验证和配置检查至关重要。
基本定义
getmxrr 获取主机名的 MX(邮件交换)记录。 MX 记录指定负责接收电子邮件消息的邮件服务器。
语法:getmxrr(string $hostname, array &$hosts, array &$weights = null): bool。 如果记录存在,则返回 true,否则返回 false。 需要 DNS 服务器访问。
基本 MX 记录检查
此示例检查一个域是否有 MX 记录并显示它们。
basic_mx_check.php
<?php
declare(strict_types=1);
$domain = "example.com";
$mxhosts = [];
$weights = [];
if (getmxrr($domain, $mxhosts, $weights)) {
echo "MX records for $domain:\n";
foreach ($mxhosts as $i => $host) {
echo "$host (priority: {$weights[$i]})\n";
}
} else {
echo "No MX records found for $domain";
}
这会检查 MX 记录并显示每个邮件服务器及其优先级。 较低的优先级数字表示首选邮件服务器。
电子邮件域验证
这演示了通过检查 MX 记录来验证电子邮件域。
email_validation.php
<?php
declare(strict_types=1);
function isValidEmailDomain($email) {
$parts = explode('@', $email);
if (count($parts) != 2) return false;
$domain = $parts[1];
return getmxrr($domain, $mxhosts);
}
$email = "user@example.com";
echo isValidEmailDomain($email) ? "Valid email domain" : "Invalid email domain";
此函数拆分电子邮件以提取域名,然后检查 MX 记录。 这比简单的格式验证更可靠。
获取带有优先级的 MX 记录
此示例检索并按其优先级值对 MX 记录进行排序。
sorted_mx_records.php
<?php
declare(strict_types=1);
$domain = "example.com";
$mxhosts = [];
$weights = [];
if (getmxrr($domain, $mxhosts, $weights)) {
$records = array_combine($mxhosts, $weights);
asort($records);
echo "Sorted MX records for $domain:\n";
foreach ($records as $host => $priority) {
echo "Priority $priority: $host\n";
}
} else {
echo "No MX records found for $domain";
}
这会将主机和权重合并到一个数组中,按优先级排序,并显示结果。 排序有助于识别首选邮件服务器。
检查多个域
这展示了如何在一个操作中检查多个域的 MX 记录。
multiple_domains.php
<?php
declare(strict_types=1);
$domains = ["example.com", "google.com", "nonexistent.test"];
$results = [];
foreach ($domains as $domain) {
$results[$domain] = getmxrr($domain, $mxhosts) ?
"Has MX records" : "No MX records";
}
print_r($results);
这会一次检查多个域并将结果存储在数组中。 批量处理在验证多个电子邮件域时非常有效。
高级电子邮件验证
这结合了 MX 记录检查和额外的电子邮件验证步骤。
advanced_email_check.php
<?php
declare(strict_types=1);
function validateEmail($email) {
// Basic format check
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}
// Extract domain
$domain = substr(strrchr($email, "@"), 1);
// Check MX records
if (!getmxrr($domain, $mxhosts)) {
// Fallback to A record check
return checkdnsrr($domain, "A");
}
return true;
}
$email = "user@example.com";
echo validateEmail($email) ? "Valid email" : "Invalid email";
这种全面的验证检查电子邮件格式、MX 记录,如果不存在 MX 记录,则回退到 A 记录。 提供强大的电子邮件验证。
最佳实践
- 缓存: 缓存 MX 记录结果以减少 DNS 查询
- 错误处理: 妥善处理 DNS 查询失败
- 超时: 考虑为 DNS 查询设置超时时间
- 验证: 与其他验证方法结合使用
- 回退: 如果没有 MX 记录,则检查 A 记录
来源
本教程涵盖了 PHP 的 getmxrr 函数,并提供了用于电子邮件验证和 MX 记录检查的实用示例。
作者
列出 所有 PHP 网络函数。