using System; using System.Collections.Generic; using System.Net; using System.Net.Mail; using System.Text; using Model; using classes; using AwsDotnetCsharp.Model; using MySqlConnector; using System.Data; namespace PMF.Services { public class Mailer: Pmfbase { public void SendEmail(ContactUsModel contactUs, List admins = default) { var message = GetEmailTemplate(contactUs); SendMessage(contactUs.Caterogy, Constants.TMT_MAIL, message, admins); } public void SendEmail(List problemInfridgments, List admins) { //use the problemInfridgments and send emails to the admins StringBuilder sb = new StringBuilder(); sb.AppendLine("The Cronjob could not complete the following payments: "); foreach (var problemInfridgment in problemInfridgments) { sb.AppendLine("infringementID: " + problemInfridgment.InfringementID.ToString() + " NoticeNumber: " + problemInfridgment.NoticeNumber); } SendMessage("PMF Error Payments", "sshabala@tmt.africa", sb.ToString(), admins); } private void SendMessage(string subject, string toEmail, string messageBody, List admins = default) { try { var secretsmanager = new SecretsManagerService(); var smtpUser = secretsmanager.GetSesUser(); SmtpClient client = new SmtpClient() { Host = Constants.TMT_MAIL_HOST, Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential() { UserName = smtpUser.SMTP_Username, Password = smtpUser.SMTP_Password } }; MailAddress from = new MailAddress(Constants.TMT_MAIL, "PMF"); MailAddress to = new MailAddress(toEmail); //pmf admin email remove this if there is no primary email MailMessage message = new MailMessage { IsBodyHtml = true, From = from }; message.To.Add(to); if (admins != null) { foreach (var adminEmail in admins) { message.CC.Add(new MailAddress(adminEmail)); } } message.Subject = subject; message.Body = messageBody; client.Send(message); } catch (Exception ex) { throw ex; } } private string ReplaceEmailPlaceHolders(string emailType, ContactUsModel contactUs) { string emailBody = ""; MySqlDataReader _reader = null; try { if (_con.State == ConnectionState.Closed) _con.Open(); string statement = $"SELECT * FROM setting WHERE strKey = '{emailType}'"; var cmd = new MySqlCommand(statement, _con); _reader = cmd.ExecuteReader(); if (_reader.HasRows) { while (_reader.Read()) { string rawValue = _reader["strValue"].ToString(); emailBody = Uri.UnescapeDataString(rawValue); } emailBody = emailBody.Replace("{name}", contactUs.Name); emailBody = emailBody.Replace("{surname}", contactUs.Surname); emailBody = emailBody.Replace("{email}", contactUs.Email); emailBody = emailBody.Replace("{number}", contactUs.IdNumber); emailBody = emailBody.Replace("{message}", contactUs.Message); if (!string.IsNullOrWhiteSpace(contactUs.TicketNumber)) { emailBody = emailBody.Replace("{ticketNumber}", contactUs.TicketNumber); } } } catch (Exception ex) { throw ex; } finally { if (_reader != null) _reader.Close(); if (_con != null || _con.State == ConnectionState.Open) _con.Close(); } return emailBody; } private string GetEmailTemplate(ContactUsModel contactUs) { string open = "{"; string close = "}"; var sb = new StringBuilder(); sb.Append(@$"

Name: {contactUs.Name}

Surname: {contactUs.Surname}

ID Number: {contactUs.IdNumber}

Email: {contactUs.Email}

Ticket number: {contactUs.TicketNumber}


{contactUs.Message}

"); return sb.ToString(); } } }