一直在搜索相当一段时间,但没有找到任何如何使用Razor类库为SMTP Core 2.1项目设置SMTP表单中的帐户/电子邮件确认,而不是任何其他模式,如使用SendGrid / MailKit。
在这方面有什么建议吗?如何在这方面使用IdentityUser?是否有必要首先支持身份?请看看你们中的任何一位专家是否可以提供这方面的帮助。
建议在生产中使用SendGrid和其他服务,因为这些服务设置正确,并且可以处理一次发送数百万封电子邮件。
但是,我很欣赏在dev中运行您的应用程序时设置SMTP电子邮件会很好。
因此,在大多数情况下,您可以按照the docs设置电子邮件确认。您需要更改的是使用SMTP服务器的EmailSender实现。
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity.UI.Services;
namespace YourApp
{
public class DevEmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string htmlMessage)
{
var client = new SmtpClient("yoursmtpserver") {
UseDefaultCredentials = false,
Credentials = new NetworkCredential("yourusername", "yourpassword")
};
var mailMessage = new MailMessage {
From = new MailAddress("[email protected]")
};
mailMessage.To.Add(email);
mailMessage.Subject = subject;
mailMessage.Body = htmlMessage;
return client.SendMailAsync(mailMessage);
}
}
}
然后你只需要将它配置为ConfigureServices
中的Startup.cs
中的服务:
services.AddTransient<IEmailSender, DevEmailSender>();
设置SMTP服务器不在此范围内,但如果你有gmail,你可以按照this blog post的说法进行操作。再次,请记住,这不是一个生产策略,实际上会打开您的Gmail帐户,直到安全漏洞,谷歌将在您设置它时突出显示。但是,如果您使用丢弃帐户,这可能是一个快速而又脏的解决方案,可以使用ASP.NET Core Identity获得电子邮件确认。
当使用@marcusturewicz上面的示例代码和gmail SMTP时,添加端口号(587)并将EnableSsl设置为ture,如下所示。
var client = new SmtpClient("smtp.gmail.com",587)
{
UseDefaultCredentials = false,
EnableSsl=true,
Credentials = new NetworkCredential(userName, password)
};
有一个简单的开发smtp服务器,可以用于发送电子邮件的开发目的,它被称为fakeSMTP