UserUtility.cs 13.5 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;
using System.Collections;

namespace AIAHTML5.API.Models
{
    public class UserUtility
    {

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

             string mailSubject = string.Empty;
             string userEmailId = string.Empty;
            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 userName = string.Empty;
                string fName = string.Empty;
                string lName = string.Empty;
                string site_url = Convert.ToString(ConfigurationManager.AppSettings["Site_URL"]);


                if (UserDetails.LoginId != "")
                    userId = UserDetails.LoginId.ToString();
                if (UserDetails.EmailId != "")
                    userEmailId = UserDetails.EmailId.ToString();
                if (UserDetails.FirstName != "")
                    fName = UserDetails.FirstName.ToString();
                if (UserDetails.LastName != "")
                    lName = UserDetails.LastName.ToString();

                string fullName = fName + " " + lName;

                string logoPath = HttpContext.Current.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["LogoPath"]));

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

                if (isMailForForgotPassword)
                {
                    if (unblockUser)
                    {
                        templatePath = Convert.ToString(ConfigurationManager.AppSettings["UnblockUserEmailTemplate"]);
                        resetPasswordLink = site_url + "?unb:" + HttpUtility.UrlEncode(userEmailId);
                    }
                    else
                    {
                        templatePath = Convert.ToString(ConfigurationManager.AppSettings["ForgotPasswordEmailTemplate"]);
                        resetPasswordLink = site_url + "?em:" + HttpUtility.UrlEncode(userEmailId);
                    }
                }
                else
                    templatePath = Convert.ToString(ConfigurationManager.AppSettings["ForgotUserIdEmailTemplate"]);

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

                lstToAddress.Add(userEmailId);

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

               
                if (!isMailForForgotPassword)
                    mailSubject = AIAConstants.FORGOT_USERID_EMAIL_SUBJECT;
                else
                {
                    if (unblockUser)
                        mailSubject = AIAConstants.UNBLOCK_USER_EMAIL_SUBJECT;
                    else
                        mailSubject = AIAConstants.FORGOT_PASSWORD_EMAIL_SUBJECT;
                }

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

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception e)
            {
                logger.Fatal("Exception in SendEmail for mailSubject + userEmailId= " + mailSubject + userEmailId + "..MSG= " + e.Message + "STACKTRACE= " + e.StackTrace);

                return false;
            }
            
        }

        protected static string GetMailBodyTextFromTemplate(string templatePath, string userId, string userEmailId, string fullName, string resetPasswordUrl)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("Inside GetMailBodyTextFromTemplate for templatePath= " + templatePath + ", userId= " + userId + ", userEmailId= " + userEmailId + ",fullName= " + fullName + ",resetPasswordLink= " + resetPasswordUrl);

            string fileToRead = string.Empty;
            string emailBody = string.Empty;
          
                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(userEmailId))
                    emailBody = emailBody.Replace("{emailId}", userEmailId);
                if (!string.IsNullOrEmpty(fullName))
                    emailBody = emailBody.Replace("{userFullName}", fullName);
                if (!string.IsNullOrEmpty(resetPasswordUrl))
                    emailBody = emailBody.Replace("{resetPasswordLink}", resetPasswordUrl);
           
            return emailBody;
        }

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

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

                string userEmailId = string.Empty;
                string fullName = string.Empty;
                string emailMessage = string.Empty;

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

                fullName = userInfo["firstName"].ToString() + " " + userInfo["lastName"].ToString();
                userEmailId = userInfo["emailId"].ToString();
                emailMessage = userInfo["userMessage"].ToString();

                lstToAddress.Add(userEmailId);

                emailMessage = emailMessage.Replace("\n", "<br/>");

                emailMessage += "<br/><br/>";

                string 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 + " " + userEmailId;
                emailUtility.sBodyText = emailMessage;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                logger.Fatal("exception in SendAdminRequestEmail for email =" + userInfo["emailId"] + ". msg= " + ex.Message + ", stacktrace= " + ex.StackTrace);
                return false;
            }
        }

        public static bool SendEmail(Newtonsoft.Json.Linq.JObject userInfo, ArrayList mailToList, string sender, string mailSubject = "", string mailBody = "")
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("Inside SendEmail with UserInfo =" + userInfo);

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

                string emailMessage = string.Empty;
                string senderEmailId = string.Empty;

                foreach (string email in mailToList)
                {
                    lstToAddress.Add(email);
                }

                emailMessage = "Unable to process request for ";

                if (UserUtility.CheckIfPropertyExists(userInfo, "username") &&  !string.IsNullOrEmpty(userInfo["username"].ToString()))
                    emailMessage += "username: <b>" + userInfo["username"].ToString() + "</b>";
                if (UserUtility.CheckIfPropertyExists(userInfo, "password") && !string.IsNullOrEmpty(userInfo["password"].ToString()))
                    emailMessage += "& password: <b>" + userInfo["password"].ToString() + "</b><br/><br/>";
                if (UserUtility.CheckIfPropertyExists(userInfo, "emailId") && !string.IsNullOrEmpty(userInfo["emailId"].ToString()))
                    emailMessage += "emailId: <b>" + userInfo["emailId"].ToString() + "</b><br/><br/>";
                if (UserUtility.CheckIfPropertyExists(userInfo, "accountNumber") && !string.IsNullOrEmpty(userInfo["accountNumber"].ToString()))
                    emailMessage += "accountNumber: <b>" + userInfo["accountNumber"].ToString() + "</b><br/><br/>";

                if (string.IsNullOrEmpty(sender))
                    senderEmailId = Convert.ToString(ConfigurationManager.AppSettings["SenderEmailAddress"]);
                else
                    senderEmailId = sender;

                emailMessage += mailBody;

                emailMessage = emailMessage.Replace("\n", "<br/>");

                emailMessage += "<br/><br/>";

                emailUtility.sHostName = Convert.ToString(ConfigurationManager.AppSettings["HostAddress"]);
                emailUtility.sFromAddress = senderEmailId;
                emailUtility.bIsBodyHtml = true;
                emailUtility.bEnableSsl = false;
                emailUtility.sSubject = mailSubject;
                emailUtility.sBodyText = emailMessage;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                logger.Fatal("exception in SendEmail for username: " + userInfo["username"].ToString() + " & password: " + userInfo["password"].ToString() + " email =" + userInfo["emailId"] + ". msg= " + ex.Message + ", stacktrace= " + ex.StackTrace);
                return false;
            }
        }

        public static ArrayList GetSupportMailList()
        {
            ArrayList supoortMailList = new ArrayList();
            string[] mailToArr = (ConfigurationManager.AppSettings["AdminSupport"]).Split(',');
            if (mailToArr.Length > 0)
            {
                for (int i = 0; i < mailToArr.Length; i++)
                {
                    supoortMailList.Add(mailToArr[i].ToString());
                }
            }
            return supoortMailList;
        }

        protected static bool CheckIfPropertyExists(dynamic dynamicObject, string propertyName)
        {
            var res = dynamicObject[propertyName];
            if (res != null)
                return true;
            else
                return false;
        }
    }
}