ResetUser.cs 6.85 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 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 == "admin")
                        isAdminRequest = true;
                }

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

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

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

                if(isAdminRequest)
                    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, 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(!isPassword)
                    mailSubject = "UserID recovery mail for: ";
                else
                    mailSubject = "Password recovery mail for: ";

                if (isAdminRequest)
                    mailSubject = "Administrator request 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;
        }
    }
}