.netCore在发送之前验证电子邮件

时间:2018-03-26 10:55:16

标签: asp.net-core mailkit

我正在寻找一种方法来在发送之前验证电子邮件地址。在电子邮件DNS服务器上。 我 NOT 需要正则表达式或表单电子邮件验证。 如果用户输入test@google.com我想知道谷歌服务器上是否有这样的地址。我知道有一些产品可以进行电子邮件验证。但我们没有钱。

我正在使用.netCore mailkit作为smptClient。我已经看到有一个验证方法,但它以某种方式进行调用,但永远不会返回。

你能帮帮忙吗?

1 个答案:

答案 0 :(得分:1)

验证电子邮件地址的唯一方法是向该地址发送一封电子邮件,其中包含用户必须单击的链接。该链接应具有为用户唯一生成的令牌。然后,当用户使用该链接访问您的网站时,您的网站会向用户查找该令牌,并将相关用户的电子邮件标记为已验证。

如果您正在使用身份,则可以使用身份验证。这里有tutorial in the Microsoft docs。从本质上讲,它只需在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);
}