Сокеты C++ - имя хоста сервера smtp с адреса электронной почты
Есть ли общее решение для поиска имени хоста SMTP-сервера или IP-адреса с адреса электронной почты в C / C++?
До сих пор я просто предшествовал доменному имени "smtp.", Но я не уверен, гарантируется ли это вообще?
И последнее, я все еще использую getaddrinfo, чтобы получить реальный IP. Это все еще стандарт? По крайней мере, у меня такое чувство, что оно должно быть уже устаревшим:D.
1 ответ
Есть ли общее решение для поиска имени хоста SMTP-сервера или IP-адреса с адреса электронной почты в C / C++?
Не универсальное решение, нет. Хотя, конечно, есть сторонние SMTP-библиотеки с такой возможностью, если вы посмотрите вокруг.
До сих пор я просто предшествовал доменному имени "smtp.", Но я не уверен, гарантируется ли это вообще?
Нет. Правильное решение состоит в том, чтобы извлечь доменную часть адреса электронной почты (все, что после @
), а затем выполните поиск DNS, запрашивая записи MX этого домена. Эти записи будут содержать имена хостов SMTP-серверов домена и порядок приоритетов, в котором они должны использоваться. Затем вы можете преобразовать эти имена хостов в IP-адреса, используя дополнительные запросы DNS, запрашивающие записи A (IPv4) и AAAA (IPv6) по мере необходимости.
Однако, если ваша цель - отправлять электронные письма непосредственно в систему SMTP данного домена, НЕ делайте этого. Правильное решение - вместо этого отправлять электронные письма через SMTP-сервер вашего почтового провайдера и разрешать ему пересылать электронные письма другим SMTP-системам по мере необходимости. В качестве меры защиты от спама большинство SMTP-серверов не разрешают доставку электронной почты из неизвестных источников, только от своих собственных пользователей и из других известных и доверенных систем ISP/SMTP, которые были внесены в белый список для целей ретрансляции.
И последнее, я все еще использую getaddrinfo, чтобы получить реальный IP. Это все еще стандарт?
Для разрешения имени хоста в IP-адрес, да.
Но вы не можете использовать getaddrinfo()
чтобы получить имена хостов SMTP домена. Вы должны напрямую запросить DNS-сервер для этого (доступно множество библиотек DNS, или вы можете реализовать протокол DNS вручную в своем собственном коде).