private async Task<List<string>> ResolveMxHostNamesAsync(string domainName)
{
var dnsMessage = await _dnsClient.ResolveAsync(DomainName.Parse(domainName), RecordType.Mx);
if (IsFailedQuery(dnsMessage))
{
// TODO: Throw specific type
throw new Exception($"Dns query for {domainName} failed.");
}
var mxRecordsByPreference =
dnsMessage.AnswerRecords.OfType<MxRecord>().OrderBy(item => item.Preference);
var result =
(from record in mxRecordsByPreference
select record.ExchangeDomainName.ToString().ToLowerInvariant()).Distinct().ToList();
return result;
}