C ++套接字-来自电子邮件地址的SMTP服务器主机名

时间:2018-07-19 07:55:52

标签: c++ sockets email

是否有通用的解决方案来从c / c ++中的电子邮件地址查找smtp服务器的主机名或ip?

到目前为止,我只是在域名前面加上“ smtp。”,但是我不确定这是否可以保证?

最后一件事,我仍在使用getaddrinfo来获取实际IP。还是标准吗?至少我觉得它应该已经过时了:D。

1 个答案:

答案 0 :(得分:1)

  

是否有通用的解决方案来从c / c ++中的电子邮件地址查找smtp服务器的主机名或ip?

不是通用解决方案,不是。当然,如果您四处看看,肯定有第三方SMTP库可以提供该功能。

  

到目前为止,我只是在域名前面加上“ smtp。”,但是我不确定这是否可以保证?

不,不是。 适当解决方案是提取电子邮件地址的域部分(@之后的所有内容),然后执行DNS查找以查询该域的MX记录。这些记录将提供域的SMTP服务器的主机名以及应使用它们的优先级顺序。然后,您可以根据需要使用其他DNS查找将这些主机名解析为IP地址,以询问A(IPv4)和AAAA(IPv6)记录。

但是,如果您的目标是直接 将电子邮件发送到给定域的SMTP系统,请不要。 正确解决方案是改为通过您自己的电子邮件提供商的SMTP服务器发送电子邮件,并根据需要将其中继到其他SMTP系统。作为一种反垃圾邮件措施,大多数SMTP服务器不允许从未知来源,仅从其自己的用户以及已列入白名单以进行中继的其他已知和受信任的ISP / SMTP系统发送电子邮件。

  

最后一件事,我仍在使用getaddrinfo来获取实际IP。还是标准的吗?

是为了将主机名解析为IP地址,是的。

但是您不能使用getaddrinfo()来检索域的SMTP主机名。您必须直接向DNS服务器查询(有很多可用的DNS库,或者您可以在自己的代码中手动实现DNS协议)。