Сокеты 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 вручную в своем собственном коде).

Другие вопросы по тегам