【PHP8.x】getmxrr関数の使い方

作成日: 更新日:

getmxrr関数は、指定されたホスト名に対応するMXレコード(Mail Exchangerレコード)を取得する関数です。MXレコードとは、特定のドメイン宛の電子メールを処理するメールサーバーの情報をインターネットに公開するための記録を指します。

この関数は、最初の引数として検索対象のホスト名(ドメイン名)を受け取ります。もしMXレコードが見つかった場合、そのメールサーバーのホスト名が2番目の引数で指定された配列に格納されます。この配列は、関数が終了すると検索結果で埋められて利用できるようになります。さらに、3番目のオプション引数として別の配列を指定すると、各メールサーバーの優先度(重み)がその配列に格納されます。優先度の数値が小さいほど、そのメールサーバーが優先的に利用されることを示します。

getmxrr関数自体は、MXレコードが正常に見つかった場合にブール値trueを返し、見つからなかった場合やエラーが発生した場合はfalseを返します。この関数は、主に特定のドメインにメールを送信する際に、どのメールサーバーに接続すべきかをプログラムで動的に判断する必要がある場合などに利用されます。これにより、メールのルーティングを適切に行う手助けとなります。

基本的な使い方

構文(syntax)

<?php
$hostname = "example.com";
$mxhosts = [];
$weight = [];

$success = getmxrr($hostname, $mxhosts, $weight);
?>

引数(parameters)

string $hostname, array &$hosts, array &$weight = null

  • string $hostname: MXレコードの検索対象となるホスト名
  • array &$hosts: 取得したMXレコードのホスト名を格納する配列(参照渡し)
  • array &$weight = null: 取得したMXレコードの優先度(weight)を格納する配列(参照渡し、省略可能)

戻り値(return)

bool

getmxrr 関数は、指定されたドメインの MX (Mail Exchanger) レコードの検索に成功したかどうかを示す真偽値 (bool) を返します。検索が成功した場合は true、失敗した場合は false を返します。

サンプルコード

PHP getmxrrでMXレコードを取得する

<?php

declare(strict_types=1);

/**
 * 指定されたドメインのMX(Mail Exchanger)レコードを取得し、表示します。
 *
 * getmxrr()は、ドメイン名に関連付けられたメールサーバーの情報をDNSから検索する関数です。
 * これにより、特定のドメイン宛のメールがどのサーバーに配送されるべきかを知ることができます。
 *
 * @param string $domain MXレコードを検索するドメイン名。
 * @return void
 */
function showMxRecords(string $domain): void
{
    // MXレコードのホスト名と重み(優先度)を格納するための配列を初期化
    $mxHosts = [];
    $mxWeights = [];

    echo "ドメイン '{$domain}' のMXレコードを検索します...\n";

    // getmxrr() を実行してMXレコードを取得します。
    // 成功すると true を返し、$mxHosts と $mxWeights 配列に結果が格納されます。
    // 失敗した場合は false を返します。
    $result = getmxrr($domain, $mxHosts, $mxWeights);

    if ($result) {
        // ホスト名と重みを結合した連想配列を作成
        $records = array_combine($mxHosts, $mxWeights);
        
        // 重み(優先度)が小さい順にソート(値が小さいほど優先度が高い)
        asort($records);

        echo "MXレコードが見つかりました:\n\n";
        echo "優先度\tメールサーバー\n";
        echo "------\t--------------\n";

        // 結果をループして表示
        foreach ($records as $host => $weight) {
            echo "{$weight}\t{$host}\n";
        }
    } else {
        echo "MXレコードが見つかりませんでした。\n";
    }
}

// 検索したいドメイン名を指定
$targetDomain = 'gmail.com';

// 関数を呼び出して実行
showMxRecords($targetDomain);

?>

このPHPサンプルコードは、getmxrr関数を使用して、指定したドメインのMXレコードを取得し表示するものです。MXレコードとは、特定のドメイン宛のメールをどのメールサーバーが受け取るかを定義する情報です。

getmxrr関数は、第1引数に調査したいドメイン名(例: 'gmail.com')を文字列で渡します。関数が成功すると、第2引数として渡した配列(サンプルコードの$mxHosts)にメールサーバーのホスト名が、第3引数の配列($mxWeights)にそれぞれの優先度(重み)を示す数値が格納されます。これらの引数は参照渡しのため、関数内で値が直接書き換えられます。関数の戻り値は真偽値(bool型)で、MXレコードが見つかればtrue、見つからなければfalseを返します。

このコードでは、getmxrrの戻り値を使って処理の成否をif文で判定しています。成功した場合、取得したホスト名と重みをarray_combine関数で一つの連想配列にまとめ、asort関数で優先度順(数値が小さいほど優先度が高い)に並べ替えます。最後に、foreachループを使って、見つかったメールサーバーの一覧を分かりやすく表示します。MXレコードが見つからなかった場合は、その旨を伝えるメッセージが出力されます。

getmxrr関数の第2、第3引数は「参照渡し」という仕組みです。これは、事前に用意した空の配列 $mxHosts$mxWeights に、関数が直接結果を書き込むためのものです。この関数はインターネット上のDNSサーバーに問い合わせるため、ネットワーク接続が必須です。また、関数の戻り値が true かどうかを必ず if 文で確認してください。false が返された場合はMXレコードが見つからなかったことを意味し、配列は空のままです。この状態で配列を使おうとするとエラーの原因になります。取得できる「重み」の値は、小さいほど優先度が高いメールサーバーを示します。存在しないドメインやMXレコードがないドメインを指定した場合も、関数は false を返します。

【PHP8.x】getmxrr関数の使い方 | いっしー@Webエンジニア