使用可交付性验证C语言中的电子邮件

使用可交付性验证C语言中的电子邮件,c,email-validation,C,Email Validation,我正在写一个C项目,需要在存储电子邮件之前对其进行验证。我必须进行交叉编译,因此不能使用regex.h 是否有一种可靠的方法可以通过检查电子邮件是否为可交付地址来验证电子邮件,而不必使用C语言发送电子邮件 如果没有办法,欢迎选择或建议。任何语言中都没有这样的过程。任何语言中都没有这样的过程。您可以查询域名(电子邮件地址中@符号后的部分),以确定域是否有效并具有有效性。要验证用户名(电子邮件地址中@符号前面的部分),您必须查询目标邮件服务器本身,例如使用VRFY命令。但是,出于安全原因,某些邮件服

我正在写一个C项目,需要在存储电子邮件之前对其进行验证。我必须进行交叉编译,因此不能使用
regex.h

是否有一种可靠的方法可以通过检查电子邮件是否为可交付地址来验证电子邮件,而不必使用C语言发送电子邮件


如果没有办法,欢迎选择或建议。

任何语言中都没有这样的过程。

任何语言中都没有这样的过程。

您可以查询域名(电子邮件地址中
@
符号后的部分),以确定域是否有效并具有有效性。要验证用户名(电子邮件地址中
@
符号前面的部分),您必须查询目标邮件服务器本身,例如使用
VRFY
命令。但是,出于安全原因,某些邮件服务器可能不支持此命令

C语言本身不提供任何可以发送网络数据包的函数。但是,大多数平台都提供了提供此功能的API(例如)。一些平台还提供了一个API来为您执行DNS查询。此外,还存在几个提供此功能的库。

您可以对域名(电子邮件地址中
@
符号后的部分)执行查询,以确定该域是否有效,是否有一个名称。要验证用户名(电子邮件地址中
@
符号前面的部分),您必须查询目标邮件服务器本身,例如使用
VRFY
命令。但是,出于安全原因,某些邮件服务器可能不支持此命令


C语言本身不提供任何可以发送网络数据包的函数。但是,大多数平台都提供了提供此功能的API(例如)。一些平台还提供了一个API来为您执行DNS查询。此外,还有几个库提供此功能。

有其他选择吗?建议??标准程序是发送带有验证链接的电子邮件。即使这样,也只能告诉你上一封邮件有效,而不是下一封邮件有效。如果您只验证电子邮件是否有效,另一个明显的问题是您不知道该电子邮件对该用户有效。info@google.com可能有效,但我无法在那里接收电子邮件。有其他选择吗?建议??标准程序是发送带有验证链接的电子邮件。即使这样,也只能告诉你上一封邮件有效,而不是下一封邮件有效。如果您只验证电子邮件是否有效,另一个明显的问题是您不知道该电子邮件对该用户有效。info@google.com可能是有效的,但我无法在那里接收电子邮件。See regex不会检查其是否可交付。检查字符串是否具有作为电子邮件地址的有效语法与检查电子邮件是否实际存在是有区别的。你想做哪一个?如果是后者,那么如果您存储了电子邮件,然后将其删除,会发生什么情况?对于欧洲,您的项目与此相关-需要考虑法律问题不要假装您可以编写一个能够正确区分有效和无效电子邮件语法的算法。你不能。除非你是所有相关RFC的专家。用于验证电子邮件地址语法的regexp只有几页长,而且完全不清楚。即使获得DNS名称也不如在
@
处拆分字符串那么容易。请参阅regex不会检查其是否可交付。检查字符串是否具有作为电子邮件地址的有效语法与检查电子邮件是否实际存在之间存在差异。你想做哪一个?如果是后者,那么如果您存储了电子邮件,然后将其删除,会发生什么情况?对于欧洲,您的项目与此相关-需要考虑法律问题不要假装您可以编写一个能够正确区分有效和无效电子邮件语法的算法。你不能。除非你是所有相关RFC的专家。用于验证电子邮件地址语法的regexp只有几页长,而且完全不清楚。即使获得DNS名称也不像在
@
处拆分字符串那么容易。电子邮件地址不需要包含MX记录。理论上,它甚至不需要涉及DNS域。试图在“the
@
”处拆分字符串以获得用户名/域对,这在最好的情况下是幼稚的,在最坏的情况下是安全问题。将未经验证且未加引号的用户名发送到smtp服务器,可能会欺骗您在该服务器上执行其他操作。小Bobby Tables的父母向您致意。电子邮件地址不需要包含MX记录。理论上,它甚至不需要涉及DNS域。试图在“the
@
”处拆分字符串以获得用户名/域对,这在最好的情况下是幼稚的,在最坏的情况下是安全问题。将未经验证且未加引号的用户名发送到smtp服务器,可能会欺骗您在该服务器上执行其他操作。小波比桌的父母向你致意。