#pragma warning disable CS8019 using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Net.Mail; #pragma warning restore CS8019 namespace Fab2ApprovalSystem.Misc; public class EmailNotification { #region Variabls protected string _subject = null; protected string _TemplatesPath = null; private readonly Models.AppSettings _AppSettings; #endregion public EmailNotification(Models.AppSettings appSettings) => _AppSettings = appSettings; public EmailNotification(Models.AppSettings appSettings, string EmailHeaderSubject) { _AppSettings = appSettings; _subject = EmailHeaderSubject; _TemplatesPath = appSettings.EmailTemplatesPath; } /// /// The Constructor Function /// /// Email Header Subject /// Emails Files Templates public EmailNotification(Models.AppSettings appSettings, string EmailHeaderSubject, string TemplatesPath) { _AppSettings = appSettings; _subject = EmailHeaderSubject; _TemplatesPath = TemplatesPath; } public EmailNotification(Models.AppSettings appSettings, string subject, string templatesPath, string emailSubject) : this(appSettings, subject, templatesPath) => EmailSubject = emailSubject; /// /// Email subject /// public string EmailSubject { set => _subject = value; } /// /// This function will read the content of a file name /// /// File Name /// String: Containing the Entire content of the file protected string ReadEmailFile(string FileName) { string retVal = null; try { string path = _TemplatesPath + FileName; #if !NET8 FileInfo TheFile = new FileInfo(System.Web.HttpContext.Current.Server.MapPath(path)); // check if the file exists in the location. if (!TheFile.Exists) throw new Exception("Could Not Find the file : " + FileName + " in the location " + _TemplatesPath); // throw an exception here. // start reading the file. i have used Encoding 1256 to support arabic text also. StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(@path), System.Text.Encoding.GetEncoding(1256)); retVal = sr.ReadToEnd(); // getting the entire text from the file. sr.Close(); #endif } catch (Exception ex) { throw new Exception("Error Reading File." + ex.Message); } return retVal; } /// /// this function will send email. it will read the mail setting from the web.config /// /// Sender Email ID /// Sender Name /// Recepient Email ID /// CC ids /// Email Subject /// Email Body #pragma warning disable IDE0060 // Remove unused parameter protected void SendEmail(string SenderEmail, string SenderName, string Recep, string cc, string email_title, string email_body) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress("MesaFabApproval@infineon.com", "Mesa Fab Approval"); msg.Sender = new MailAddress("MesaFabApproval@infineon.com", "Mesa Fab Approval"); // adding the Recepient Email ID msg.To.Add(Recep); // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new("mailrelay-internal.infineon.com"); // sending the message. try { SmtpMail.Send(msg); } catch (Exception ex) { Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", ex.ToString()); } } #pragma warning restore IDE0060 // Remove unused parameter protected void SendEmailWithAttachment(string SenderEmail, string SenderName, string Recep, string cc, string email_title, string email_body, string attachmentPath) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress(SenderEmail, SenderName); // adding the Recepient Email ID msg.To.Add(Recep); // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; msg.Attachments.Add(new Attachment(attachmentPath)); // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new(); #if(!DEBUG) // sending the message. SmtpMail.Send(msg); #endif } #pragma warning disable IDE0060 // Remove unused parameter protected void SendEmail(string SenderEmail, string SenderName, List RecepientList, string cc, string email_title, string email_body) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress("MesaFabApproval@infineon.com", "Mesa Fab Approval"); // adding the Recepient Email ID foreach (string recepient in RecepientList) { msg.To.Add(recepient); } // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new(); // sending the message. try { SmtpMail.Send(msg); } catch (Exception ex) { Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", ex.ToString()); } } #pragma warning restore IDE0060 // Remove unused parameter protected void SendEmailWithAttachment(string SenderEmail, string SenderName, List RecepientList, string cc, string email_title, string email_body, string attachmentPath) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress(SenderEmail, SenderName); // adding the Recepient Email ID foreach (string recepient in RecepientList) { if (recepient != null) msg.To.Add(recepient); } // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; msg.Attachments.Add(new Attachment(attachmentPath)); // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new(); // sending the message. SmtpMail.Send(msg); } protected void SendEmailWithAttachments(string SenderEmail, string SenderName, string Recep, string cc, string email_title, string email_body, List attachments) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress(SenderEmail, SenderName); // adding the Recepient Email ID msg.To.Add(Recep); // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; foreach (string attachment in attachments) { msg.Attachments.Add(new Attachment(attachment)); } // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new(); #if(!DEBUG) // sending the message. SmtpMail.Send(msg); #endif } protected void SendEmailWithAttachments(string SenderEmail, string SenderName, List RecepientList, string cc, string email_title, string email_body, List attachments) { // creating email message MailMessage msg = new(); msg.IsBodyHtml = true;// email body will allow html elements // setting the Sender Email ID msg.From = new MailAddress(SenderEmail, SenderName); // adding the Recepient Email ID foreach (string recepient in RecepientList) { if (recepient != null) msg.To.Add(recepient); } // add CC email ids if supplied. if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc); // setting email subject and body msg.Subject = email_title; msg.Body = email_body; foreach (string attachment in attachments) { msg.Attachments.Add(new Attachment(attachment)); } // create a Smtp Mail which will automatically get the smtp server details from web.config mailSettings section SmtpClient SmtpMail = new(); // sending the message. SmtpMail.Send(msg); } /// /// This function will send the email notification by reading the email template and substitute the arguments /// /// Email Template File /// Sender Email /// Sender Name /// Recepient Email ID /// CC IDs /// EMail Subject /// Arguments /// String: Return the body of the email to be send public string SendNotificationEmail(string EmailTemplateFile, string SenderEmail, string SenderName, string RecepientEmail, string CC, string Subject, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { SendEmail(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? Subject + " for: " + RecepientEmail : _subject), retVal); } else { #if(!DEBUG) SendEmail(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal); #endif } } catch (Exception ex) { throw; } return retVal; } /// /// This function will send the email notification by reading the email template and substitute the arguments along with the attachments /// public string SendNotificationEmailWithAttachment(string EmailTemplateFile, string SenderEmail, string SenderName, string RecepientEmail, string CC, string Subject, string attachmentPath, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { SendEmailWithAttachment(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? " TESTING ONLY -IGNORE : " + Subject + RecepientEmail : _subject), retVal, attachmentPath); } else { #if(!DEBUG) SendEmailWithAttachment(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal, attachmentPath); #endif } } catch (Exception ex) { throw; } return retVal; } public string SendNotificationEmailWithAttachment(string EmailTemplateFile, string SenderEmail, string SenderName, List RecepientEmail, string CC, string Subject, string attachmentPath, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { foreach (string email in RecepientEmail) { Subject += email + ";"; } RecepientEmail.Clear(); SendEmailWithAttachment(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? " TESTING ONLY -IGNORE : " + Subject : _subject), retVal, attachmentPath); } else { #if (!DEBUG) SendEmailWithAttachment(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal, attachmentPath); #endif } } catch (Exception ex) { throw; } return retVal; } public string SendNotificationEmailWithAttachments(string EmailTemplateFile, string SenderEmail, string SenderName, string RecepientEmail, string CC, string Subject, List attachments, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { SendEmailWithAttachments(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? " TESTING ONLY -IGNORE : " + Subject + RecepientEmail : _subject), retVal, attachments); } else { #if(!DEBUG) SendEmailWithAttachments(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal, attachments); #endif } } catch (Exception ex) { throw; } return retVal; } public string SendNotificationEmailWithAttachments(string EmailTemplateFile, string SenderEmail, string SenderName, List RecepientEmail, string CC, string Subject, List attachments, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { foreach (string email in RecepientEmail) { Subject += email + ";"; } RecepientEmail.Clear(); SendEmailWithAttachments(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? " TESTING ONLY -IGNORE : " + Subject : _subject), retVal, attachments); } else { #if (!DEBUG) SendEmailWithAttachments(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal, attachments); #endif } } catch (Exception ex) { throw; } return retVal; } public string SendNotificationEmail(string EmailTemplateFile, string SenderEmail, string SenderName, List RecepientEmail, string CC, string Subject, params string[] Args) { string retVal = null; // reading the file string FileContents = ReadEmailFile(EmailTemplateFile); string emailBody = FileContents; // setting formatting the string retVal = string.Format(emailBody, Args); try { // check if we are in debug mode or not. to send email if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { foreach (string email in RecepientEmail) { Subject += email + ";"; } RecepientEmail.Clear(); SendEmail(SenderEmail, SenderName, GetTestRecipientsList(), CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal); } else { #if (!DEBUG) SendEmail(SenderEmail, SenderName, RecepientEmail, CC, (!string.IsNullOrEmpty(Subject) ? Subject : _subject), retVal); #endif } } catch (Exception ex) { throw; } return retVal; } public void SendNotificationEmailToAdmin(string subject, string body, MailPriority importance) { try { SmtpClient client = new(_AppSettings.SMTPServer); MailMessage msg = new(); string toList = _AppSettings.AdminNotificationRecepient; msg.From = new MailAddress(_AppSettings.NotificationSender); string[] recipients = toList.Split(','); foreach (string recipient in recipients) msg.To.Add(new MailAddress(recipient.Trim())); DateTime now = DateTime.Now; string temp = now.ToString() + " - " + body; msg.Subject = subject; msg.Body = temp; msg.Priority = importance; client.Send(msg); } catch (Exception ex) { throw; } } public List GetTestRecipientsList() { List r = new(); try { string emails = _AppSettings.TestEmailRecipients; foreach (string s in emails.Split(';', ',')) { if (!string.IsNullOrWhiteSpace(s)) r.Add(s); } } catch { r.Add("dhuang2@infineon.com"); } return r; } }