W3docs

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:

php— editable, runs on the server

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ão priority.
  • host: o domínio ao qual o registro pertence.
  • type: o tipo de registro, aqui sempre MX.
  • 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; passe DNS_MX, DNS_A, DNS_TXT, etc.
  • getmxrr() — o equivalente com parâmetros por referência que dns_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.

Prática

Prática
O que a função dns_get_mx() no PHP realiza?
O que a função dns_get_mx() no PHP realiza?
Was this page helpful?