using Swift.API.Common; using System; using System.Collections.Generic; using System.IO; using System.Net.Mail; using System.Net.Mime; namespace Swift.web.Library { public class SmtpMailSetting { public SmtpMailSetting() { ToEmails = ""; CcEmails = ""; BccEmails = ""; MsgSubject = ""; MsgBody = ""; SmtpPort = Convert.ToInt16(GetStatic.ReadWebConfig("SmtpPort", "")); SmtpServer = GetStatic.ReadWebConfig("SmtpServer", ""); SendEmailId = GetStatic.ReadWebConfig("SendEmailId", ""); SendEmailPwd = GetStatic.ReadWebConfig("SendEmailPwd", ""); EnableSsl = true; } public int SmtpPort { get; set; } public string SmtpServer { get; set; } public string SendEmailId { get; set; } public string SendEmailPwd { get; set; } public string ToEmails { get; set; } public string CcEmails { get; set; } public string BccEmails { get; set; } public string MsgSubject { get; set; } public string MsgBody { get; set; } public bool EnableSsl { get; set; } public string Status { get; set; } /// /// Send mail through gme SMTP server /// /// /// receiver details mail body and subject /// /// /// public string SendSmtpMail(SmtpMailSetting smtpMail, List attachmentList = null, List embadedList = null) { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient(); try { SmtpServer.Host = smtpMail.SmtpServer; SmtpServer.Port = smtpMail.SmtpPort; SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential(smtpMail.SendEmailId, smtpMail.SendEmailPwd); SmtpServer.EnableSsl = EnableSsl; mail.From = new MailAddress(smtpMail.SendEmailId); mail.To.Add(smtpMail.ToEmails); var ccList = smtpMail.CcEmails.Split(';'); if (ccList[0] != "") { for (int i = 0; i < ccList.Length; i++) { mail.CC.Add(ccList[i]); } } //if (!string.IsNullOrEmpty(smtpMail.CcEmails)) // mail.CC.Add(smtpMail.CcEmails); if (!string.IsNullOrEmpty(smtpMail.BccEmails)) mail.Bcc.Add(smtpMail.BccEmails); mail.Subject = smtpMail.MsgSubject; mail.IsBodyHtml = true; mail.Body = smtpMail.MsgBody; if (attachmentList != null) { foreach (var item in attachmentList) { Attachment attachment = new Attachment(item.FilePath, item.FileType); ContentDisposition disposition = attachment.ContentDisposition; disposition.CreationDate = File.GetCreationTime(item.FilePath); disposition.ModificationDate = File.GetLastWriteTime(item.FilePath); disposition.ReadDate = File.GetLastAccessTime(item.FilePath); disposition.FileName = Path.GetFileName(item.FileName); disposition.Size = new FileInfo(item.FilePath).Length; disposition.DispositionType = DispositionTypeNames.Attachment; mail.Attachments.Add(attachment); } } if (embadedList != null) { if (embadedList.Count > 0) { AlternateView vw = GetEmbeddedImage(embadedList, smtpMail.MsgBody); mail.AlternateViews.Add(vw); } } System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; SmtpServer.Send(mail); smtpMail.Status = "Y"; SmtpServer.Dispose(); } catch (SmtpFailedRecipientsException ex) { for (int i = 0; i < ex.InnerExceptions.Length; i++) { SmtpStatusCode status = ex.InnerExceptions[i].StatusCode; if (status == SmtpStatusCode.MailboxBusy || status == SmtpStatusCode.MailboxUnavailable) { // Console.WriteLine("Delivery failed - retrying in 5 seconds."); System.Threading.Thread.Sleep(5000); SmtpServer.Send(mail); } else { // Console.WriteLine("Failed to deliver message to {0}", ex.InnerExceptions[i].FailedRecipient); //throw ex; smtpMail.Status = "N"; smtpMail.MsgBody = ex.Message; GetStatic.EmailNotificationLog(smtpMail); } } } catch (Exception ex) { smtpMail.Status = "N"; smtpMail.MsgBody = ex.ToString(); GetStatic.EmailNotificationLog(smtpMail); } finally { SmtpServer.Dispose(); } GetStatic.EmailNotificationLog(smtpMail); return (smtpMail.Status == "Y") ? "Mail Send" : "Error while sending Email"; } private AlternateView GetEmbeddedImage(List attachmentList, string htmlBody) { AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html); foreach (var item in attachmentList) { byte[] bytes = System.Convert.FromBase64String(item.Byte64String); LinkedResource res = new LinkedResource(new MemoryStream(bytes), item.FileType); res.ContentId = item.FileName; alternateView.LinkedResources.Add(res); } return alternateView; } } }