我正在寻找一种在发送之前验证电子邮件地址的方法。在电子邮件DNS服务器上。我做不是需要正则或形式的电子邮件验证。如果用户输入test@google.com我想知道Google服务器上是否有这样的地址。我知道有些产品可以进行电子邮件验证。但是我们没有钱。
我正在使用.netcore mailkit作为SmptClient。我已经看到有一个验证方法,但它以某种方式进行了调用,但永远不会返回。
您可以帮忙吗?
验证电子邮件地址的唯一方法是使用用户必须单击的链接将电子邮件发送到该地址。该链接应该为用户独特地生成令牌。然后,当用户使用该链接访问您的网站并标记关联用户的电子邮件经过验证时,您的网站从用户查找令牌。
如果您使用的是身份,则对此进行支持。在Microsoft文档中有一个教程。本质上,它涉及在startup.cs中的AddIdentity
配置中添加一行:
config.SignIn.RequireConfirmedEmail = true;
然后,在您的注册操作中,您将使用以下内容在确认电子邮件中生成链接的URL:
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
接下来,只需以任何您喜欢的方式将电子邮件发送给用户。在您的电子邮件确认操作中,以下内容根据URL中的代码确认了电子邮件:
var result = await _userManager.ConfirmEmailAsync(user, code);
编辑
Url.EmailConfirmationLink
方法实际上来自当您将单个验证添加到新项目中时生成的代码中添加的扩展名。这是为此的代码,供参考:
public static string EmailConfirmationLink(this IUrlHelper urlHelper, string userId, string code, string scheme)
{
return urlHelper.Action(
action: nameof(AccountController.ConfirmEmail),
controller: "Account",
values: new { userId, code },
protocol: scheme);
}