using System.Net; using System.Net.Mail; using System.Threading.Tasks; using Abp.Dependency; using Abp.Extensions; namespace Abp.Net.Mail.Smtp { /// /// Used to send emails over SMTP. /// public class SmtpEmailSender : EmailSenderBase, ISmtpEmailSender, ITransientDependency { private readonly ISmtpEmailSenderConfiguration _configuration; /// /// Creates a new . /// /// Configuration public SmtpEmailSender(ISmtpEmailSenderConfiguration configuration) : base(configuration) { _configuration = configuration; } public SmtpClient BuildClient() { var host = _configuration.Host; var port = _configuration.Port; var smtpClient = new SmtpClient(host, port); try { if (_configuration.EnableSsl) { smtpClient.EnableSsl = true; } if (_configuration.UseDefaultCredentials) { smtpClient.UseDefaultCredentials = true; } else { smtpClient.UseDefaultCredentials = false; var userName = _configuration.UserName; if (!userName.IsNullOrEmpty()) { var password = _configuration.Password; var domain = _configuration.Domain; smtpClient.Credentials = !domain.IsNullOrEmpty() ? new NetworkCredential(userName, password, domain) : new NetworkCredential(userName, password); } } return smtpClient; } catch { smtpClient.Dispose(); throw; } } protected override async Task SendEmailAsync(MailMessage mail) { using (var smtpClient = BuildClient()) { await smtpClient.SendMailAsync(mail); } } protected override void SendEmail(MailMessage mail) { using (var smtpClient = BuildClient()) { smtpClient.Send(mail); } } } }