ASP.NET MVC 用户管理器 SendEmailAsync:如何更改发件人电子邮件

Posted

技术标签:

【中文标题】ASP.NET MVC 用户管理器 SendEmailAsync:如何更改发件人电子邮件【英文标题】:ASP.NET MVC Usermanager SendEmailAsync: How to change sender email 【发布时间】:2021-10-05 07:55:06 【问题描述】:

我正在使用带有 Identity 2 的 ASP.NET MVC5,有一个名为 IdentityConfig.cs 的文件,其中包含我已经实现的 EmailServe:

public class EmailService : IIdentityMessageService

    public async Task SendAsync(IdentityMessage message)
    
        using (var client = new SmtpClient())
        
            using (var mailMessage = new MailMessage("info@mydomain.com", message.Destination, message.Subject, message.Body))
            
                mailMessage.IsBodyhtml = true;
                await client.SendMailAsync(mailMessage);
            
        
    

通过此设置,我可以通过在 UserManager 上调用此方法来发送用户电子邮件:

await UserManager.SendEmailAsync(user.Id, emailSubject, emailBody);

到目前为止一切顺利,但我希望根据主题从不同的发件人发送电子邮件。例如,账号注册/重置密码发件人为account@mydomain.com,信息查询邮件发件人为info@mydomain.com,销售/下单发件人为sales@mydomain.com。

不幸的是,SendEmailAsync 方法无法设置发件人,我也不知道如何在 EmailService 中实现这一点。任何人都可以帮助解决这个问题吗?有没有办法向 UserManager 或 EmailSerivce 添加扩展方法,以便我可以选择指定不同的发件人?

【问题讨论】:

您不能使用 UserManager。您必须直接致电您的电子邮件提供商。 @GHDevOps 如何直接调用电子邮件提供商? 取决于供应商。我确定 c# 有它的客户端。我们使用 SendGrid,所以只需创建一个新的客户端实例并使用它。如果您使用的是 MS 产品,则可能需要用户互操作。 虽然我们使用的是内部 STMP,但不确定它有多大的不同。不过,真的不能在 UserManager 或 EmailService 中添加扩展方法来实现这种行为吗? 非常简单:docs.microsoft.com/en-us/dotnet/api/… 可能最难的事情就是追踪你的服务器名称! 【参考方案1】:

如果我在你的位置,我会将我所有的电子邮件放在 web.config 文件中,并在返回相关电子邮件的 EmailService 类中的私有方法中访问它根据主题,然后在电子邮件参数的位置调用此方法。例如:

public async Task SendAsync(IdentityMessage message) 

    using (var client = new SmtpClient())
       
        //calling getEmail() instead of email
        using (var mailMessage = new MailMessage(getEmail(message.Subject),
    message.Destination, message.Subject, message.Body))
        
            mailMessage.IsBodyHtml = true;
            await client.SendMailAsync(mailMessage);
        
    


private string getEmail(string subject) 

    var emails = ConfigurationManager.AppSettings["Emails"];
    string[] emailAddresses = emails.Split(',');
    //your logic here
    return email;

【讨论】:

以上是关于ASP.NET MVC 用户管理器 SendEmailAsync:如何更改发件人电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 异常“角色管理器功能尚未启用”

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

ASP.NET MVC 5 中的简单角色管理器和授权,无需使用 Identity(CustomRoleProvider)

asp.net mvc 发布问题

七天学会ASP.NET MVC ——Layout页面使用和用户角色管理

在 asp.net MVC 中实现超级用户功能?