resolveMX method
Resolves MX records for a domain, returning both preference and address.
Implementation
@override
Future<List<MXRecord>> resolveMX(String domain) async {
// Get full MX DNS records
final record = await client.lookupHttpsByRRType(domain, RRType.MX);
final answers = record.answer ?? [];
final mxRecords = <MXRecord>[];
for (var answer in answers) {
if (answer.type == RRType.MX.value) {
// MX data format: "priority mailserver"
// Example: "10 mail.example.com."
final parts = answer.data.split(' ');
if (parts.length >= 2) {
final preference = int.tryParse(parts[0]) ?? 0;
final hostname = parts[1].replaceAll(RegExp(r'\.$'), '');
if (hostname.isNotEmpty) {
try {
// Resolve the MX hostname to an IP
final addresses = await InternetAddress.lookup(hostname);
for (var addr in addresses) {
mxRecords.add(MXRecord(preference, addr));
}
} catch (e, s) {
_log.severe(
"Error calling: `InternetAddress.lookup('$hostname')`",
e,
s,
);
}
}
}
}
}
// Sort by preference (lowest first)
mxRecords.sort();
return mxRecords;
}