Função PHP dns_get_mx(): Tudo o que Você Precisa Saber
Saiba como usar a função PHP dns_get_mx() e sua alternativa moderna dns_get_record() para obter registros MX de um domínio.
Como desenvolvedor PHP, pode ser necessário obter os registros MX (mail exchange) de um nome de domínio. A função dns_get_mx() foi historicamente utilizada para esse fim, mas foi removida no PHP 8.2. A abordagem moderna utiliza dns_get_record() com a flag DNS_MX. Neste artigo, abordaremos a função legada, sua descontinuação e como usar a alternativa recomendada.
O que é a Função dns_get_mx()?
A função dns_get_mx() era uma função PHP interna que recuperava os registros MX (mail exchange) de um determinado nome de domínio. Os registros MX informam a outros servidores de e-mail quais hosts são responsáveis por aceitar e-mails de um domínio, classificados por prioridade. dns_get_mx() era um alias de getmxrr() e foi removida no PHP 8.2. O substituto recomendado é dns_get_record($hostname, DNS_MX).
A Sintaxe Legada do dns_get_mx()
A função original (agora removida) era um alias de getmxrr() e usava parâmetros por referência para retornar seus resultados:
dns_get_mx($hostname, &$mxhosts, &$weight);A função recebia três parâmetros:
$hostname: O nome de domínio para o qual você deseja recuperar os registros MX.$mxhosts: Uma variável por referência preenchida com a lista de nomes de hosts MX.$weight: Uma variável por referência opcional preenchida com a prioridade (preferência) de cada host.
Como os resultados eram retornados por referência em vez de um valor de retorno, a função retornava apenas true em caso de sucesso ou false em caso de falha. Esse padrão mais antigo é exatamente o motivo pelo qual a função foi descontinuada em favor da dns_get_record(), que retorna um array.
Como Recuperar Registros MX Atualmente
A abordagem moderna é dns_get_record($hostname, DNS_MX), que retorna um array de arrays associativos — um por registro — e funciona em todas as versões PHP suportadas:
Aqui recuperamos os registros MX de gmail.com. dns_get_record() retorna um array de registros em caso de sucesso, ou false em caso de falha. Percorremos os registros com foreach e exibimos o host do servidor de e-mail e sua prioridade. Observe que consultas DNS podem travar ou falhar em domínios inválidos, portanto, sempre verifique o valor de retorno e considere o tratamento de timeout em produção.
Entendendo o array retornado
Cada registro MX é um array associativo. As chaves mais utilizadas são:
target: o nome do host do servidor de e-mail que deve receber e-mails para o domínio.pri: a prioridade (preferência) — números menores são tentados primeiro. Esta é a chave que substitui o antigo parâmetro por referência$weight; observe que épri, nãopriority.host: o domínio ao qual o registro pertence.type: o tipo de registro, aqui sempreMX.ttl: por quanto tempo (em segundos) o registro pode ser armazenado em cache.
Ordenando por prioridade
O DNS não garante que os registros sejam retornados em ordem de prioridade, portanto, ordene-os antes de escolher um servidor de e-mail:
<?php
$records = dns_get_record("gmail.com", DNS_MX);
usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);
foreach ($records as $record) {
echo $record['pri'] . " => " . $record['target'] . "\n";
}Um cliente de e-mail tenta primeiro o host de menor prioridade e recorre a números maiores somente se ele estiver inacessível.
Funções Relacionadas
dns_get_record()— o substituto de uso geral; passeDNS_MX,DNS_A,DNS_TXT, etc.getmxrr()— o equivalente com parâmetros por referência quedns_get_mx()utilizava como alias.checkdnsrr()— verifica se existe um registro de um determinado tipo para um host.
Conclusão
Embora dns_get_mx() tenha sido o padrão para recuperar registros MX, ela foi removida no PHP 8.2. Use dns_get_record($hostname, DNS_MX) para consultas DNS modernas e confiáveis. Esperamos que este guia ajude você a implementar pesquisas de registros MX de forma eficaz em suas aplicações PHP.