using System.Configuration;
using System.Net.Mail;
using System.Reflection;
using System.Web.Security;
using MileageTraker.Web.Models;
using NLog;
namespace MileageTraker.Web.Email
{
///
/// Email Notification
///
public class EmailNotificationService
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly string _emaialFromAddress;
private readonly string _resetPasswordSubject;
private readonly string _resetPasswordBody;
private readonly string _initializePasswordSubject;
private readonly string _initializePasswordBody;
private readonly SmtpClient _smtpClient;
///
/// Initializes a new instance of the class.
///
/// The SMTP client.
public EmailNotificationService()
{
_smtpClient = new SmtpClient();
_emaialFromAddress = ConfigurationManager.AppSettings["EmailFromAddress"];
_resetPasswordSubject = ConfigurationManager.AppSettings["ResetPasswordSubject"];
_resetPasswordBody = ConfigurationManager.AppSettings["ResetPasswordBody"];
_initializePasswordSubject = ConfigurationManager.AppSettings["InitializePasswordSubject"];
_initializePasswordBody = ConfigurationManager.AppSettings["InitializetPasswordBody"];
}
///
/// Sends the reset password email.
///
/// To this user.
/// Reset url
public void SendResetPassword(User user, string url)
{
var body = string.Format(_resetPasswordBody, url, user.Username);
SendMessage(new MailMessage(_emaialFromAddress, user.Email, _resetPasswordSubject, body));
}
public void SendInitializePassword(User user, string url)
{
var body = string.Format(_initializePasswordBody, url, user.FullName, user.Username);
SendMessage(new MailMessage(_emaialFromAddress, user.Email, _initializePasswordSubject, body));
}
public void SendServiceReminder(ServiceReminderEmail email)
{
SendMessage(new MailMessage(_emaialFromAddress, email.Recipient.Email, email.Subject, email.Body));
}
private void SendMessage(MailMessage mailMessage)
{
try
{
Logger.Debug("Email sending to " + mailMessage.To + ", subject: " + mailMessage.Subject);
_smtpClient.Send(mailMessage);
}
catch (SmtpException ex)
{
Logger.Error(ex, $"Failed to send mail. Status Code: {ex.StatusCode}. Message: {ex.Message}");
}
}
}
}