#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;
}
}