public async Task <bool> SendMailAsync(TEmailLog emailLog)
        {
            try
            {
                MailMessage mMessage = new MailMessage();
                var         cred     = GetEmailCredentials();
                mMessage.To.Add(emailLog.To);
                mMessage.Subject = emailLog.Subject;
                if (emailLog.From.Contains(">"))
                {
                    mMessage.From = new MailAddress(emailLog.From);
                }
                else
                {
                    mMessage.From = new MailAddress($"{emailLog.Name} <{emailLog.From}>");
                }

                //Check if it has Carbon Copy
                if (!string.IsNullOrEmpty(emailLog.EmailCc))
                {
                    string[] CCId = emailLog.EmailCc.Split(',');

                    foreach (string CCEmail in CCId)
                    {
                        mMessage.CC.Add(new MailAddress(CCEmail)); //Adding Multiple CC email Id
                    }
                }

                mMessage.Body       = emailLog.Body;
                mMessage.Priority   = MailPriority.High;
                mMessage.IsBodyHtml = true;

                if (emailLog.HasAttachment)
                {
                    var attachments = emailLog.AttachmentLoc.Split(',');
                    foreach (var attt in attachments)
                    {
                        var leAttachment = Path.Combine(Directory.GetCurrentDirectory(), attt);
                        mMessage.Attachments.Add(new Attachment(leAttachment));
                    }
                }

                using (SmtpClient smtpMail = new SmtpClient())
                {
                    smtpMail.Host        = cred.SMTPHost;
                    smtpMail.Port        = Convert.ToInt32(cred.SMTPPort);
                    smtpMail.EnableSsl   = true;
                    smtpMail.Credentials = new NetworkCredential(cred.SenderEmail, cred.Password);

                    await smtpMail.SendMailAsync(mMessage);

                    return(true);
                }
            }
            catch (Exception)
            {
                return(false);
            }
        }
        public async Task LogEmail(TEmailLog emailLog)
        {
            try
            {
                using (var scope = _serviceScope.CreateScope())
                {
                    var dbcontext = scope.ServiceProvider.GetService <authDbContext>();

                    emailLog.LastFailed   = null;
                    emailLog.Lastmodified = null;
                    emailLog.Createddate  = DateTime.Now;
                    dbcontext.TEmailLog.Add(emailLog);
                    await dbcontext.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
            }
        }
        public async Task <int> NotifyDoctorMeetingLink(ZoomMeetingNotificationDTO model)
        {
            //Fetch Subject from DB based on supplied template ID
            var fetchtemplate = await GetSystemEmailTemplate("ZM_MTN");

            //Replace placeholder in template with message sent
            string MessageBody = fetchtemplate.Body.Replace("[DoctorName]", model.doctorname);

            MessageBody = MessageBody.Replace("[PatientName]", model.patientname);
            MessageBody = MessageBody.Replace("[MeetingURL]", model.meetingurl);

            var cred = GetEmailCredentials();

            try
            {
                MailMessage NewEmail = new MailMessage(cred.SenderEmail, model.doctorsemail, fetchtemplate.Subject, MessageBody)
                {
                    IsBodyHtml = true,
                    Priority   = MailPriority.High,
                    From       = new MailAddress(cred.SenderEmail, cred.SenderName)
                };

                // Add a carbon copy recipient.
                //MailAddress copy = new MailAddressCollection(cred.CC,);

                using SmtpClient smtpMail = new SmtpClient();
                smtpMail.Host             = cred.SMTPHost;
                smtpMail.Port             = cred.SMTPPort;
                smtpMail.EnableSsl        = cred.EnableSsl;
                smtpMail.Credentials      = new NetworkCredential(cred.SenderEmail, cred.Password);

                //var x = (!string.IsNullOrEmpty(cred.CC)) ? NewEmail.CC.Add(cred.CC) : null;
                await smtpMail.SendMailAsync(NewEmail);

                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    Sent            = true,
                    To        = model.doctorsemail,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "Anonymous",
                };
                await LogEmail(newrec);
            }
            catch (Exception ex)
            {
                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    FailedSending   = true,
                    LastFailed      = DateTime.Now,
                    Sent            = false,
                    To        = model.doctorsemail,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "Anonymous",
                };
                await LogEmail(newrec);

                _logger.LogError(ex.Message);
                return(1001);
            }
            return(0);
        }
        public async Task <int> SendDoctorAppointmentBooking(PatientAppointmentMailViewModel model)
        {
            //Fetch Subject from DB based on supplied template ID
            var fetchtemplate = await GetSystemEmailTemplate("DOCAPT_BKN");

            //Replace placeholder in template with message sent
            string MessageBody = fetchtemplate.Body.Replace("[PatientName]", model.patientname);

            MessageBody = MessageBody.Replace("[ScheduledDate]", model.scheduleddate);
            MessageBody = MessageBody.Replace("[DoctorName]", model.doctorname);
            MessageBody = MessageBody.Replace("[PatientPhoneNumber]", model.patientphonenumber);
            MessageBody = MessageBody.Replace("[TimeSlot]", model.timeslot);
            MessageBody = MessageBody.Replace("[HospitalName]", model.hospitalname);
            MessageBody = MessageBody.Replace("[HospitalContact]", model.hospitalcontact);
            MessageBody = MessageBody.Replace("[HospitalAddress]", model.hospitaladdress);

            var guid_string = Guid.NewGuid().ToString();
            var cred        = GetEmailCredentials();

            try
            {
                MailMessage NewEmail = new MailMessage(cred.SenderEmail, model.emailaddress, fetchtemplate.Subject, MessageBody)
                {
                    IsBodyHtml = true,
                    Priority   = MailPriority.High,
                    From       = new MailAddress(cred.SenderEmail, cred.SenderName)
                };

                // Add a carbon copy recipient.
                //MailAddress copy = new MailAddressCollection(cred.CC,);

                using (SmtpClient smtpMail = new SmtpClient())
                {
                    smtpMail.Host        = cred.SMTPHost;
                    smtpMail.Port        = cred.SMTPPort;
                    smtpMail.EnableSsl   = cred.EnableSsl;
                    smtpMail.Credentials = new NetworkCredential(cred.SenderEmail, cred.Password);

                    //var x = (!string.IsNullOrEmpty(cred.CC)) ? NewEmail.CC.Add(cred.CC) : null;
                    await smtpMail.SendMailAsync(NewEmail);

                    TEmailLog newrec = new TEmailLog
                    {
                        Sendimmediately = true,
                        Datetosend      = DateTime.Now,
                        CanSend         = true,
                        Name            = fetchtemplate.Name,
                        From            = cred.SenderEmail,
                        Sent            = true,
                        To        = model.emailaddress,
                        Subject   = fetchtemplate.Subject,
                        Body      = MessageBody,
                        EmailCc   = cred.CC,
                        EmailBcc  = cred.BCC,
                        Createdby = "Anonymous",
                    };
                    await LogEmail(newrec);
                }
            }
            catch (Exception ex)
            {
                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    FailedSending   = true,
                    LastFailed      = DateTime.Now,
                    Sent            = false,
                    To        = model.emailaddress,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "Anonymous",
                };
                await LogEmail(newrec);

                _logger.LogError(ex.Message);
                return(1001);
            }
            return(0);
        }
        public async Task <int> SendPasswordResetEmail(string emailadd, string username, string reseturl, long merchantid)
        {
            //Fetch Subject from DB based on supplied template ID
            var fetchtemplate = await GetSystemEmailTemplate("RST_PWD");

            //Replace placeholder in template with message sent
            string MessageBody = fetchtemplate.Body.Replace("[Username]", username);

            MessageBody = MessageBody.Replace("[ResetURL]", reseturl);
            MessageBody = MessageBody.Replace("[TWITTERICON]", Base64Images.TwitterIcon);
            MessageBody = MessageBody.Replace("[FBICON]", Base64Images.FacebookIcon);
            MessageBody = MessageBody.Replace("[Username]", username);
            MessageBody = MessageBody.Replace("[TWITTERURL]", _config.GetSection("TwitterUrl").Value);
            MessageBody = MessageBody.Replace("[FBURL]", _config.GetSection("FacebookUrl").Value);

            var cred = GetEmailCredentials();

            try
            {
                MailMessage NewEmail = new MailMessage(cred.SenderEmail, emailadd, fetchtemplate.Subject, MessageBody)
                {
                    IsBodyHtml = true,
                    Priority   = MailPriority.High,
                    From       = new MailAddress(cred.SenderEmail, cred.SenderName)
                };

                // Add a carbon copy recipient.
                //MailAddress copy = new MailAddressCollection(cred.CC,);

                using (SmtpClient smtpMail = new SmtpClient())
                {
                    smtpMail.Host        = cred.SMTPHost;
                    smtpMail.Port        = cred.SMTPPort;
                    smtpMail.EnableSsl   = cred.EnableSsl;
                    smtpMail.Credentials = new NetworkCredential(cred.SenderEmail, cred.Password);

                    await smtpMail.SendMailAsync(NewEmail);

                    TEmailLog newrec = new TEmailLog
                    {
                        Sendimmediately = true,
                        Datetosend      = DateTime.Now,
                        CanSend         = true,
                        Name            = fetchtemplate.Name,
                        From            = cred.SenderEmail,
                        Sent            = true,
                        To        = emailadd,
                        Subject   = fetchtemplate.Subject,
                        Body      = MessageBody,
                        EmailCc   = cred.CC,
                        EmailBcc  = cred.BCC,
                        Createdby = username,
                    };
                    await LogEmail(newrec);
                }
            }
            catch (Exception ex)
            {
                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    FailedSending   = true,
                    LastFailed      = DateTime.Now,
                    Sent            = false,
                    To        = emailadd,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = username,
                };
                await LogEmail(newrec);

                _logger.LogError(ex.Message);
                return(1001);
            }
            return(0);
        }
        public async Task <int> SendMail(string emailadd, string subject, string body, string name, long merchantid)
        {
            var cred = GetEmailCredentials();

            try
            {
                MailMessage NewEmail = new MailMessage(cred.SenderEmail, emailadd, subject, body)
                {
                    IsBodyHtml = true,
                    Priority   = MailPriority.High,
                    From       = new MailAddress(cred.SenderEmail, cred.SenderName)
                };

                // Add a carbon copy recipient.
                //MailAddress copy = new MailAddressCollection(cred.CC,);

                using (SmtpClient smtpMail = new SmtpClient())
                {
                    smtpMail.Host        = cred.SMTPHost;
                    smtpMail.Port        = cred.SMTPPort;
                    smtpMail.EnableSsl   = cred.EnableSsl;
                    smtpMail.Credentials = new NetworkCredential(cred.SenderEmail, cred.Password);

                    //var x = (!string.IsNullOrEmpty(cred.CC)) ? NewEmail.CC.Add(cred.CC) : null;
                    await smtpMail.SendMailAsync(NewEmail);

                    TEmailLog newrec = new TEmailLog
                    {
                        Sendimmediately = true,
                        Datetosend      = DateTime.Now,
                        CanSend         = true,
                        Name            = name,
                        From            = cred.SenderEmail,
                        Sent            = true,
                        To        = emailadd,
                        Subject   = subject,
                        Body      = body,
                        EmailCc   = cred.CC,
                        EmailBcc  = cred.BCC,
                        Createdby = "System",
                    };
                    await LogEmail(newrec);
                }
            }
            catch (Exception ex)
            {
                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = name,
                    From            = cred.SenderEmail,
                    FailedSending   = true,
                    LastFailed      = DateTime.Now,
                    Sent            = false,
                    To        = emailadd,
                    Subject   = subject,
                    Body      = body,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "System",
                };
                await LogEmail(newrec);

                _logger.LogError(ex.Message);
                return(1001);
            }
            return(0);
        }
        public async Task <int> SendApplicationLiveEmail(string emailadd, string loginurl, string firstname, string merchantFullname)
        {
            //Fetch Subject from DB based on supplied template ID
            var fetchtemplate = await GetSystemEmailTemplate("APPL_LIVE");

            //Replace placeholder in template with message sent
            string MessageBody = fetchtemplate.Body.Replace("[firstname]", firstname);

            MessageBody = MessageBody.Replace("[merchant_fullname]", merchantFullname);
            MessageBody = MessageBody.Replace("[LoginURL]", loginurl);
            //String SafeMessageBody = MessageBody.Replace(password, "XXXXXXXXXXX");

            var cred = GetEmailCredentials();

            try
            {
                MailMessage NewEmail = new MailMessage(cred.SenderEmail, emailadd, fetchtemplate.Subject, MessageBody)
                {
                    IsBodyHtml = true,
                    Priority   = MailPriority.High,
                    From       = new MailAddress(cred.SenderEmail, cred.SenderName)
                };

                // Add a carbon copy recipient.
                //MailAddress copy = new MailAddressCollection(cred.CC,);

                using SmtpClient smtpMail = new SmtpClient();
                smtpMail.Host             = cred.SMTPHost;
                smtpMail.Port             = cred.SMTPPort;
                smtpMail.EnableSsl        = cred.EnableSsl;
                smtpMail.Credentials      = new NetworkCredential(cred.SenderEmail, cred.Password);

                //var x = (!string.IsNullOrEmpty(cred.CC)) ? NewEmail.CC.Add(cred.CC) : null;
                await smtpMail.SendMailAsync(NewEmail);

                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    Sent            = true,
                    To        = emailadd,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "Anonymous",
                };
                await LogEmail(newrec);
            }
            catch (Exception ex)
            {
                TEmailLog newrec = new TEmailLog
                {
                    Sendimmediately = true,
                    Datetosend      = DateTime.Now,
                    CanSend         = true,
                    Name            = fetchtemplate.Name,
                    From            = cred.SenderEmail,
                    FailedSending   = true,
                    LastFailed      = DateTime.Now,
                    Sent            = false,
                    To        = emailadd,
                    Subject   = fetchtemplate.Subject,
                    Body      = MessageBody,
                    EmailCc   = cred.CC,
                    EmailBcc  = cred.BCC,
                    Createdby = "Anonymous",
                };
                await LogEmail(newrec);

                _logger.LogError(ex.Message);
                return(1001);
            }
            return(0);
        }