ResetUser.cs 15.6 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MongoDB.Driver;
using MongoDB.Bson;
using AIAHTML5.API.Properties;
using AIAHTML5.API.Constants;
using log4net;
using System.Net.Mail;
using AIAHTML5.API.Utility;
using System.Text;
using System.IO;
using System.Net.Mime;
using System.Configuration;

namespace AIAHTML5.API.Models
{
    public class ResetUser
    {
        public static bool SendEmail(dynamic UserDetails, bool isPassword)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside SendEmail in  for isPassword =" + isPassword);
            
            try
            {
                List<LinkedResource> lstLinkedResource = new List<LinkedResource>();
                EmailUtility emailUtility = new EmailUtility();
                List<string> lstToAddress = new List<string>();
                List<string> lstBccAddress = new List<string>();

                string emailText = string.Empty;
                string userId = string.Empty;
                string userMail = string.Empty;
                string userName = string.Empty;
                string fName = string.Empty;
                string lName = string.Empty;
                string site_url = Convert.ToString(ConfigurationManager.AppSettings["Site_URL"]);
                bool isAdminRequest = false;

                foreach (KeyValuePair<string, object> kvp in UserDetails)
                {
                    if (kvp.Key == "loginId")
                        userId = kvp.Value.ToString();

                    if (kvp.Key == "emailId")
                        userMail = kvp.Value.ToString();

                    if (kvp.Key == "firstName")
                        fName = kvp.Value.ToString();

                    if (kvp.Key == "lastName")
                        lName = kvp.Value.ToString();

                    if (kvp.Key == "isAdmin")
                        isAdminRequest = Convert.ToBoolean(kvp.Value);
                }

                string fullName = fName + " " + lName;
                
                string logoPath = HttpContext.Current.Server.MapPath("~/content/images/logo.png");

                string templatePath = string.Empty;
                string resetPasswordLink = string.Empty;

                if (isAdminRequest)
                {
                    templatePath = "~/Templates/admin-Request.html";
                }
                else
                {
                    if (isPassword)
                    {
                        templatePath = "~/Templates/forgot-Password.html";
                        resetPasswordLink = site_url + "?em:" + HttpUtility.UrlEncode(userMail);
                    }
                    else
                        templatePath = "~/Templates/forgot-UserId.html";
                }
                    

                logger.Debug("inside SendEmail for templatePath= " + templatePath + ", userId= " + userId + ", userMail= " + userMail + ",fullName= " + fullName + ",resetPasswordLink= " + resetPasswordLink);
                string mailBody = ResetUser.GetMailBodyTextFromTemplate(templatePath, userId, userMail, fullName, resetPasswordLink);

                lstToAddress.Add(userMail);

                emailText = mailBody;

                logger.Debug("emailText= " + emailText);
                // for embedding images in email
                if (emailText.Contains("<img"))
                {
                    LinkedResource linkedLogo = new LinkedResource(logoPath, MediaTypeNames.Image.Jpeg);
                    linkedLogo.ContentId = "AIA_Logo_Image";
                    linkedLogo.TransferEncoding = TransferEncoding.Base64;
                    emailText = emailText.Replace("{logoPath}", "cid:" + linkedLogo.ContentId);
                    lstLinkedResource.Add(linkedLogo);
                }

                emailUtility.sAlternateView = AlternateView.CreateAlternateViewFromString(emailText, null, "text/html");
                foreach (var sItem in lstLinkedResource)
                {
                    emailUtility.sAlternateView.LinkedResources.Add(sItem);
                }

                string mailSubject = string.Empty;
                if (isAdminRequest)
                    mailSubject = "'Admin' request for: ";
                else
                {
                    if (!isPassword)
                        mailSubject = "UserID recovery mail for: ";
                    else
                        mailSubject = "Password recovery mail for: ";
                }
                

                emailUtility.sHostName = Convert.ToString(ConfigurationManager.AppSettings["HostAddress"]);
                emailUtility.sFromAddress = Convert.ToString(ConfigurationManager.AppSettings["SenderEmailAddress"]);
                emailUtility.bIsBodyHtml = true;
                emailUtility.bEnableSsl = false;
                emailUtility.sSubject = mailSubject + userMail;
                //sEmailUtility.sBodyText = sEmailText;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                string message = "Exception: " + ex.Message;
                return false;
            }
        }

        protected static string GetMailBodyTextFromTemplate(string templatePath, string userId, string userMail, string fullName, string resetPasswordUrl)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside GetMailBodyTextFromTemplate for templatePath= " + templatePath + ", userId= " + userId + ", userMail= " + userMail + ",fullName= " + fullName + ",resetPasswordLink= " + resetPasswordUrl);
            
            string fileToRead = string.Empty;
            string emailBody = string.Empty;
            try
            {               
                fileToRead = HttpContext.Current.Server.MapPath(templatePath);

                using (StreamReader reader = new StreamReader(fileToRead))
                {
                    emailBody = reader.ReadToEnd();
                }

                if(!string.IsNullOrEmpty(userId))
                    emailBody = emailBody.Replace("{loginId}", userId);
                if (!string.IsNullOrEmpty(userMail))
                    emailBody = emailBody.Replace("{emailId}", userMail);
                if(!string.IsNullOrEmpty(fullName))
                    emailBody = emailBody.Replace("{userFullName}", fullName);
                if(!string.IsNullOrEmpty(resetPasswordUrl))
                    emailBody = emailBody.Replace("{resetPasswordLink}", resetPasswordUrl);
            }
            catch (Exception e)
            {
                emailBody = "Exception: " + e.Message;
                logger.Fatal("exception in GetMailBodyTextFromTemplate. msg= " + e.Message + ", stacktrace= " + e.StackTrace);
            }
            return emailBody;
        }

        public static bool SendAdminAccessRequestEmail(dynamic UserDetails, bool isAdmin)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside SendEmail in  for isAdmin =" + isAdmin);

            try
            {
                List<LinkedResource> lstLinkedResource = new List<LinkedResource>();
                EmailUtility emailUtility = new EmailUtility();
                List<string> lstToAddress = new List<string>();
                List<string> lstBccAddress = new List<string>();

                string emailText = string.Empty;
                string userId = string.Empty;
                string userMail = string.Empty;
                string userName = string.Empty;
                string fName = string.Empty;
                string lName = string.Empty;
                string site_url = Convert.ToString(ConfigurationManager.AppSettings["Site_URL"]);

                foreach (KeyValuePair<string, object> kvp in UserDetails)
                {
                    if (kvp.Key == "loginId")
                        userId = kvp.Value.ToString();

                    if (kvp.Key == "emailId")
                        userMail = kvp.Value.ToString();

                    if (kvp.Key == "firstName")
                        fName = kvp.Value.ToString();

                    if (kvp.Key == "lastName")
                        lName = kvp.Value.ToString();
                }

                string fullName = fName + " " + lName;

                string logoPath = HttpContext.Current.Server.MapPath("~/content/images/logo.png");

                string templatePath = string.Empty;
                string resetPasswordLink = string.Empty;

                if (isAdmin)
                {
                    templatePath = "~/Templates/admin-Request.html";
                }
               
                logger.Debug("inside SendEmail for templatePath= " + templatePath + ", userId= " + userId + ", userMail= " + userMail + ",fullName= " + fullName + ",resetPasswordLink= " + resetPasswordLink);
                string mailBody = ResetUser.GetMailBodyTextFromTemplate(templatePath, userId, userMail, fullName, "");

                lstToAddress.Add(userMail);

                emailText = mailBody;

                logger.Debug("emailText= " + emailText);
                // for embedding images in email
                if (emailText.Contains("<img"))
                {
                    LinkedResource linkedLogo = new LinkedResource(logoPath, MediaTypeNames.Image.Jpeg);
                    linkedLogo.ContentId = "AIA_Logo_Image";
                    linkedLogo.TransferEncoding = TransferEncoding.Base64;
                    emailText = emailText.Replace("{logoPath}", "cid:" + linkedLogo.ContentId);
                    lstLinkedResource.Add(linkedLogo);
                }

                emailUtility.sAlternateView = AlternateView.CreateAlternateViewFromString(emailText, null, "text/html");
                foreach (var sItem in lstLinkedResource)
                {
                    emailUtility.sAlternateView.LinkedResources.Add(sItem);
                }

                string mailSubject = string.Empty;
                if (isAdmin)
                    mailSubject = "'Admin' access request for account: ";
                

                emailUtility.sHostName = Convert.ToString(ConfigurationManager.AppSettings["HostAddress"]);
                emailUtility.sFromAddress = Convert.ToString(ConfigurationManager.AppSettings["SenderEmailAddress"]);
                emailUtility.bIsBodyHtml = true;
                emailUtility.bEnableSsl = false;
                emailUtility.sSubject = mailSubject + userMail;
                //sEmailUtility.sBodyText = sEmailText;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                string message = "Exception: " + ex.Message;
                return false;
            }
        }

        public static bool SendAdminRequestEmail(Newtonsoft.Json.Linq.JObject userInfo)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside SendEmail in  for isAdmin =" + userInfo["isAdmin"]);

            try
            {
                List<LinkedResource> lstLinkedResource = new List<LinkedResource>();
                EmailUtility emailUtility = new EmailUtility();
                List<string> lstToAddress = new List<string>();
                List<string> lstBccAddress = new List<string>();

                string emailText = string.Empty;
                string userId = string.Empty;
                string userMail = string.Empty;
                string userName = string.Empty;
                string fullName = string.Empty;
                string message = string.Empty;
                bool isAdmin = false;
                
                string site_url = Convert.ToString(ConfigurationManager.AppSettings["Site_URL"]);

                string[] mailToArr = (ConfigurationManager.AppSettings["AdminSupport"]).Split(',');
                for(int i=0; i<mailToArr.Length; i++)
                {
                    lstToAddress.Add(mailToArr[i].ToString());
                }

                fullName = userInfo["firstName"].ToString() + " " + userInfo["lastName"].ToString();
                userMail = userInfo["emailId"].ToString();
                message = userInfo["userMessage"].ToString();
                isAdmin = Convert.ToBoolean(userInfo["isAdmin"]);

                string logoPath = HttpContext.Current.Server.MapPath("~/content/images/logo.png");

                string templatePath = string.Empty;
                string resetPasswordLink = string.Empty;

                //if (isAdmin)
                //{
                //    templatePath = "~/Templates/admin-Request.html";
                //}

                //logger.Debug("inside SendEmail for templatePath= " + templatePath + ", userId= " + userId + ", userMail= " + userMail + ",fullName= " + fullName + ",resetPasswordLink= " + resetPasswordLink);
                //string mailBody = UserUtility.GetMailBodyTextFromTemplate(templatePath, userId, userMail, fullName, "");

                //if (!string.IsNullOrEmpty(message))
                //    mailBody = mailBody.Replace("{usermessage}", message);

                lstToAddress.Add(userMail);

                //emailText = mailBody;
                emailText = message;
                emailText = emailText +"<br/><br/>";

                logger.Debug("emailText= " + emailText);
                // for embedding images in email
                if (emailText.Contains("<img"))
                {
                    LinkedResource linkedLogo = new LinkedResource(logoPath, MediaTypeNames.Image.Jpeg);
                    linkedLogo.ContentId = "AIA_Logo_Image";
                    linkedLogo.TransferEncoding = TransferEncoding.Base64;
                    emailText = emailText.Replace("{logoPath}", "cid:" + linkedLogo.ContentId);
                    lstLinkedResource.Add(linkedLogo);
                }

                emailUtility.sAlternateView = AlternateView.CreateAlternateViewFromString(emailText, null, "text/html");
                foreach (var sItem in lstLinkedResource)
                {
                    emailUtility.sAlternateView.LinkedResources.Add(sItem);
                }

                string mailSubject = string.Empty;
                if (isAdmin)
                    mailSubject = "Admin Support request initiated for:";


                emailUtility.sHostName = Convert.ToString(ConfigurationManager.AppSettings["HostAddress"]);
                emailUtility.sFromAddress = Convert.ToString(ConfigurationManager.AppSettings["SenderEmailAddress"]);
                emailUtility.bIsBodyHtml = true;
                emailUtility.bEnableSsl = false;
                emailUtility.sSubject = mailSubject + " " + userMail;
                //sEmailUtility.sBodyText = sEmailText;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                string message = "Exception: " + ex.Message;
                return false;
            }
        }

    }
}