UserUtility.cs 8.93 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 UserUtility
    {
        public static bool SendEmail(dynamic UserDetails, bool havePassword)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside SendEmail in  for isPassword =" + havePassword);
            
            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> userObj in UserDetails)
                {
                    if (userObj.Key == "loginId")
                        userId = userObj.Value.ToString();

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

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

                    if (userObj.Key == "lastName")
                        lName = userObj.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 (havePassword)
                {
                    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 = UserUtility.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 (!havePassword)
                    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;
                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 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 userMail = 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();
                userMail = userInfo["emailId"].ToString();
                emailMessage = userInfo["userMessage"].ToString();

                lstToAddress.Add(userMail);
                
                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 + " " + userMail;
                emailUtility.sBodyText = emailMessage;
                emailUtility.iPort = 25;
                emailUtility.sToAddresses = lstToAddress;
                emailUtility.sBccAddresses = lstBccAddress;

                emailUtility.SendSmtpEmail();
                return true;
            }
            catch (Exception ex)
            {
                logger.Fatal("exception in GetMailBodyTextFromTemplate. msg= " + ex.Message + ", stacktrace= " + ex.StackTrace);
                return false;
            }
        }

    }
}