示例#1
0
        public static BaseMessageHandler GetHandler(MsgTypes msgType)
        {
            BaseMessageHandler handler = null;

            switch (msgType)
            {
            case MsgTypes.Email:
                handler = new EmailMessageHandler();
                break;

            case MsgTypes.Txt:
                handler = new TxtMessageHandler();
                break;

            case MsgTypes.QQ:
                handler = new QQMessageHandler();
                break;

            case MsgTypes.SMS:
                handler = new SmsMessageHandler();
                break;

            case MsgTypes.WeChat:
                handler = new WeChatMessageHandler();
                break;
            }
            return(handler);
        }
示例#2
0
        public void sendMessage(Message message)
        {
            MessageHandler nextHandler = null;

            foreach (var value in message.destination)
            {
                switch (value.Key)
                {
                case Destination.FAX:
                    nextHandler = new FaxMessageHandler(nextHandler);
                    break;

                case Destination.EMAIL:
                    nextHandler = new EmailMessageHandler(nextHandler);
                    break;

                case Destination.SMS:
                    nextHandler = new SMSMessageHandler(nextHandler);
                    break;
                }
            }
            if (nextHandler != null)
            {
                nextHandler.handle(message);
            }
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.FindByEmailAsync(Input.Email);

            if (user == null)
            {
                ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email.");
                return(Page());
            }

            var userId = await _userManager.GetUserIdAsync(user);

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page(
                "/Account/ConfirmEmail",
                pageHandler: null,
                values: new { userId = userId, code = code },
                protocol: Request.Scheme);

            string subject = EmailMessageHandler.EmailSubject("Email Confirmation");
            string message = EmailMessageHandler.EmailMessage(user, callbackUrl, "email");

            await _emailSender.SendEmailAsync(
                Input.Email, subject, message);

            ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email.");
            return(Page());
        }
        public void EmailMessageHandler_SendEmail_EmailSuccessfullySent()
        {
            //Dependant on a template named 'welcome' in the Dev.Artifact.Template table.

            //Arrange
            User user = new User();

            user.FirstName  = "Erin";
            user.Email      = "*****@*****.**";
            user.LastName   = "Meraz";
            user.Password   = "******";
            user.Username   = Guid.NewGuid().ToString();
            user.CreateDate = DateTime.UtcNow;

            Sessions.Momntz.Save(user);
            Sessions.Momntz.Flush();

            EmailMessage message = new EmailMessage(user.Id, "*****@*****.**", "welcome", new Dictionary <string, string> {
                { "[FirstName]", "Erin" }
            });

            EmailMessageHandler handler = new EmailMessageHandler(Sessions);

            handler.Handle(message);
        }
示例#5
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(Input.Email);

                if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    return(RedirectToPage("./ForgotPasswordConfirmation"));
                }

                // For more information on how to enable account confirmation and password reset please
                // visit https://go.microsoft.com/fwlink/?LinkID=532713
                var code = await _userManager.GeneratePasswordResetTokenAsync(user);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ResetPassword",
                    pageHandler: null,
                    values: new { area = "Identity", code },
                    protocol: Request.Scheme);

                string subject = EmailMessageHandler.EmailSubject("Password Reset");
                string message = EmailMessageHandler.EmailMessage(user, callbackUrl, "email");

                await _emailSender.SendEmailAsync(
                    Input.Email, subject, message);

                return(RedirectToPage("./ForgotPasswordConfirmation"));
            }

            return(Page());
        }
示例#6
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = Input.Email, Email = Input.Email, FirstName = Input.FirstName, LastName = Input.LastName
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    string subject = EmailMessageHandler.EmailSubject("Email Confirmation");
                    string message = EmailMessageHandler.EmailMessage(user, callbackUrl, "email");

                    await _emailSender.SendEmailAsync(
                        Input.Email, subject, message);

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
示例#7
0
        public async Task <IActionResult> OnPostChangeEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);

                return(Page());
            }

            var email = await _userManager.GetEmailAsync(user);

            if (Input.NewEmail != email)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmailChange",
                    pageHandler: null,
                    values: new { userId = userId, email = Input.NewEmail, code = code },
                    protocol: Request.Scheme);

                string subject = EmailMessageHandler.EmailSubject("Email Confirmation");
                string message = EmailMessageHandler.EmailMessage(user, callbackUrl, "email");

                await _emailSender.SendEmailAsync(
                    Input.NewEmail, subject, message);

                StatusMessage = "Confirmation link to change email sent. Please check your email.";
                return(RedirectToPage());
            }

            StatusMessage = "Your email is unchanged.";
            return(RedirectToPage());
        }
示例#8
0
 public IActionResult SendEmails([FromBody] SendEmailsModel model)
 {
     if (ModelState.IsValid)
     {
         var emails = model.EmailAddresses.SplitSafe(",");
         if (emails.IsEmpty())
         {
             return(JError(T["noneemailsettings"]));
         }
         EmailSetting emailSettings = _settingFinder.Get <EmailSetting>();
         if (emailSettings.Host.IsEmpty())
         {
             return(JError(T["noneemailsettings"]));
         }
         var _emailMessageHandler = new EmailMessageHandler();
         foreach (var em in emails)
         {
             _emailMessageHandler.Send(new EmailNotifyBody()
             {
                 Subject = model.Subject
                 ,
                 Content = model.Content
                 ,
                 Host = emailSettings.Host
                 ,
                 Port = int.Parse(emailSettings.Port)
                 ,
                 UserName = emailSettings.UserName
                 ,
                 Password = emailSettings.Password
                 ,
                 From = emailSettings.From
                 ,
                 FromName = emailSettings.FromName
                 ,
                 To = em
             });
         }
         return(JOk(T["operation_success"]));
     }
     return(JError(T["operation_error"] + ": " + GetModelErrors()));
 }
        public void EmailMessageHandler_SendEmail_EmailSuccessfullySent()
        {
            //Dependant on a template named 'welcome' in the Dev.Artifact.Template table.

            //Arrange
            User user = new User();
            user.FirstName = "Erin";
            user.Email = "*****@*****.**";
            user.LastName = "Meraz";
            user.Password = "******";
            user.Username = Guid.NewGuid().ToString();
            user.CreateDate = DateTime.UtcNow;

            Sessions.Momntz.Save(user);
            Sessions.Momntz.Flush();

            EmailMessage message = new EmailMessage(user.Id, "*****@*****.**", "welcome", new Dictionary<string, string> { { "[FirstName]", "Erin" } });

            EmailMessageHandler handler = new EmailMessageHandler(Sessions);
            handler.Handle(message);
        }
示例#10
0
        public ServiceResultEnum Create(ref Donation obj)
        {
            // Number of changes as a result of the database change
            NumberChanges = 0;

            // only perform if payment section was shown to the user
            if (obj.ShowPaymentSection)
            {
                // send information to payment service
                var paymentResult = ServiceResultEnum.Failure;
                var payment       = obj.GetPaymentInformation();
                try
                {
                    var brainTreeHandler = new BrainTreeHandler();
                    paymentResult = brainTreeHandler.SendTransactionRequest(ref payment);
                    if (paymentResult == ServiceResultEnum.Success)
                    {
                        ServiceResult = paymentResult;
                        obj.DonationInformation.PaymentTransactionId = payment.TransactionResult.Target.Id;
                        Messages.Add("Payment processed successfully");
                    }
                }
                catch (Exception ex)
                {
                    Messages.Add(ex.Message);
                }

                // check if the payment was not processed
                if (paymentResult == ServiceResultEnum.Failure)
                {
                    Messages.Add(payment.TransactionResult.Message);
                    var errorMessage = payment.ErrorMessage();
                    if (errorMessage.IsNotNullOrEmpty())
                    {
                        Messages.Add(errorMessage);
                    }
                    ServiceResult = paymentResult;
                    return(ServiceResult);
                }
            }

            // payment is a success, save information to the database
            try
            {
                // Perform data access using the context
                using (var context = new HuskyRescueEntities())
                {
                    var personHandler = new PersonHandler();
                    var person        = obj.DonationInformation.Person;
                    if (personHandler.Create(ref person) == ServiceResultEnum.Success)
                    {
                        obj.DonationInformation.BaseId = person.BaseID;

                        // convert to database object
                        var dbObj = obj.DonationInformation.ToModel();

                        // add to the database and retrieve the updated object back (namely the GUID generated into the Id)
                        dbObj = context.Entity_Donation.Add(dbObj);

                        // commit changes to the database
                        NumberChanges = context.SaveChanges();

                        // convert the database object back to a presentation object with included changes from the database (if any)
                        obj.DonationInformation.Id = dbObj.Id;
                    }
                }
            }
            catch (InvalidOperationException ex)
            {
                Trace.WriteLine(ex.Message);
                Messages.Add(ex.Message);
            }
            catch (DbEntityValidationException ex)
            {
                Messages.AddRange(Common.FormatEntityValidationError(ex));
            }

            // check if database changes were a success
            ServiceResult = NumberChanges > 0 ? ServiceResultEnum.Success : ServiceResultEnum.Failure;
            if (ServiceResult == ServiceResultEnum.Success)
            {
                Messages.Add("Donation saved to database successfully");
            }
            // if the save to database didn't work then keep going as the payment already processed.
            // TODO: log registration information to database for manual entry

            // send emails
            var emailSendResult = ServiceResultEnum.Failure;

            try
            {
                const string signature = @" 
Texas Husky Rescue
1-877-TX-HUSKY (894-8759) (phone/fax)
PO Box 118891, Carrollton, TX 75011";

                var emailBodyToDonor = new StringBuilder();
                emailBodyToDonor.AppendFormat("Thank you, {0}, for your donation of {1} to Texas Husky Rescue.",
                                              obj.DonationInformation.Person.FullName, obj.DonationInformation.Amount.ToString("C"));
                emailBodyToDonor.AppendLine().Append(signature);

                var emailBodyToGroup = new StringBuilder();
                emailBodyToGroup.AppendFormat("Donation received from {0} for {1}", obj.DonationInformation.Person.FullName, obj.DonationInformation.Amount.ToString("C"));
                if (obj.DonationInformation.DonorComments.IsNotNullOrEmpty())
                {
                    emailBodyToGroup.AppendLine().Append("Notes from donor: ").AppendLine().Append(obj.DonationInformation.DonorComments);
                }

                var message = new EmailMessage
                {
                    BodyTextExternal     = emailBodyToDonor.ToString(),
                    BodyTextInternal     = emailBodyToGroup.ToString(),
                    Subject              = "Texas Husky Rescue Donation",
                    EmailAddressExternal = obj.DonationInformation.Person.Base.EmailAddresses[0].Address,
                    EmailAddressInternal = Settings.Default.ContactEmail,
                    NameInternal         = "Texas Husky Rescue",
                    NameExternal         = string.Empty
                };

                var emailMessageHandler = new EmailMessageHandler();
                emailSendResult = emailMessageHandler.SendMessage(ref message);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }

            if (emailSendResult == ServiceResultEnum.Success)
            {
                Messages.Add("Email confirmation sent");
            }

            return(ServiceResultEnum.Success);
        }
        /// <summary>
        /// Add new EventRegistration to the database
        /// </summary>
        /// <param name="obj">EventRegistration object to be saved to the database</param>
        /// <returns>success or failure</returns>
        public ServiceResultEnum Create(ref RoughRiderRegistration obj)
        {
            var eventReg = obj.EventRegistration;

            // Number of changes as a result of the database change
            NumberChanges = 0;

            // remove blank attendees
            eventReg.Attendees.RemoveAll(a => string.IsNullOrEmpty(a.Person.FirstName));
            eventReg.Attendees.ForEach(a => a.Person.Base.EmailAddresses.RemoveAll(b => string.IsNullOrEmpty(b.Address)));
            eventReg.Attendees.ForEach(a => a.Person.Base.PhoneNumbers.RemoveAll(b => string.IsNullOrEmpty(b.Number)));
            eventReg.Event = null;

            // only perform if payment section was shown to the user
            if (obj.ShowPaymentSection)
            {
                // send information to payment service
                var paymentResult = ServiceResultEnum.Failure;
                var payment       = obj.GetPaymentInformation();
                try
                {
                    var brainTreeHandler = new BrainTreeHandler();
                    paymentResult = brainTreeHandler.SendTransactionRequest(ref payment);
                    if (paymentResult == ServiceResultEnum.Success)
                    {
                        ServiceResult = paymentResult;
                        eventReg.PaymentTransactionId = payment.TransactionResult.Target.Id;
                        eventReg.HasPaid = true;
                        Messages.Add("Payment processed successfully");
                    }
                }
                catch (Exception ex)
                {
                    Messages.Add(ex.Message);
                }

                // check if the payment was not processed
                if (paymentResult == ServiceResultEnum.Failure)
                {
                    Messages.Add(payment.TransactionResult.Message);
                    var errorMessage = payment.ErrorMessage();
                    if (errorMessage.IsNotNullOrEmpty())
                    {
                        Messages.Add(errorMessage);
                    }
                    ServiceResult = paymentResult;
                    return(ServiceResult);
                }
            }

            // payment is a success, save information to the database
            try
            {
                // Perform data access using the context
                using (var context = new HuskyRescueEntities())
                {
                    // convert to database object
                    var dbObj = eventReg.ToModel();

                    // add to the database and retrieve the updated object back (namely the GUID generated into the Id)
                    dbObj = context.Event_Registration.Add(dbObj);

                    // commit changes to the database
                    NumberChanges = context.SaveChanges();

                    // convert the database object back to a presentation object with included changes from the database (if any)
                    eventReg = dbObj.ToViewModel();
                }
            }
            catch (InvalidOperationException ex)
            {
                Trace.WriteLine(ex.Message);
                Messages.Add(ex.Message);
            }
            catch (DbEntityValidationException ex)
            {
                Messages.AddRange(Common.FormatEntityValidationError(ex));
            }

            // check if database changes were a success
            ServiceResult = NumberChanges > 0 ? ServiceResultEnum.Success : ServiceResultEnum.Failure;
            if (ServiceResult == ServiceResultEnum.Success)
            {
                Messages.Add("Registration saved to database successfully");
            }
            // if the save to database didn't work then keep going as the payment already processed.
            // TODO: log registration information to database for manual entry

            // send emails
            var emailSendResult = ServiceResultEnum.Failure;

            try
            {
                const string subject     = "2014 TXHR Night out with the Frisco RoughRiders";
                const string bodyAppHtml = @" 
Thank You for supporting Texas Husky Rescue. Your tickets will be available at Will Call the night of the game. As a reminder, the game is Friday May 23 at 7:05 PM at the DrPepper Ballpark. For seating and directions see this site http://goo.gl/BujLRR. 

Advance parking passes can also be purchased from Jessica (972-334-1936 or [email protected]) with the RoughRiders for $5. Parking passes purchased the day of the game are $10. 

We'll see you at the game!

Thank you,
Texas Husky Rescue
1-877-TX-HUSKY (894-8759) (phone/fax)
PO Box 118891, Carrollton, TX 75011
";
                var          message     = new EmailMessage
                {
                    BodyTextExternal     = bodyAppHtml,
                    BodyTextInternal     = eventReg.RegistrationDescription,
                    Subject              = subject,
                    EmailAddressExternal = eventReg.Attendees[0].Person.Base.EmailAddresses[0].Address,
                    EmailAddressInternal = Settings.Default.RoughRiderEmail,
                    NameInternal         = "Texas Husky Rescue",
                    NameExternal         = string.Empty
                };

                var emailMessageHandler = new EmailMessageHandler();
                emailSendResult = emailMessageHandler.SendMessage(ref message);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }

            if (emailSendResult == ServiceResultEnum.Success)
            {
                Messages.Add("Email confirmation sent");
            }

            return(ServiceResultEnum.Success);
        }
 public EmailService(EmailMessageHandler emailMessageHandler)
 {
     this.EmailMessageHandler = emailMessageHandler;
 }
        /// <summary>
        /// Add new EventRegistration to the database
        /// </summary>
        /// <param name="obj">EventRegistration object to be saved to the database</param>
        /// <returns>success or failure</returns>
        public ServiceResultEnum Create(ref GolfRegistration obj)
        {
            var eventReg = obj.EventRegistration;

            // Number of changes as a result of the database change
            NumberChanges = 0;

            // remove blank attendees
            eventReg.Attendees.RemoveAll(a => string.IsNullOrEmpty(a.Person.FirstName));
            eventReg.Attendees.ForEach(a => a.Person.Base.EmailAddresses.RemoveAll(b => string.IsNullOrEmpty(b.Address)));
            eventReg.Attendees.ForEach(a => a.Person.Base.PhoneNumbers.RemoveAll(b => string.IsNullOrEmpty(b.Number)));
            eventReg.Event = null;

            // only perform if payment section was shown to the user
            if (obj.ShowPaymentSection)
            {
                // send information to payment service
                var paymentResult = ServiceResultEnum.Failure;
                var payment       = obj.GetPaymentInformation();
                try
                {
                    var brainTreeHandler = new BrainTreeHandler();
                    paymentResult = brainTreeHandler.SendTransactionRequest(ref payment);
                    if (paymentResult == ServiceResultEnum.Success)
                    {
                        ServiceResult = paymentResult;
                        eventReg.PaymentTransactionId = payment.TransactionResult.Target.Id;
                        eventReg.HasPaid = true;
                        Messages.Add("Payment processed successfully");
                    }
                }
                catch (Exception ex)
                {
                    Messages.Add(ex.Message);
                }

                // check if the payment was not processed
                if (paymentResult == ServiceResultEnum.Failure)
                {
                    Messages.Add(payment.TransactionResult.Message);
                    var errorMessage = payment.ErrorMessage();
                    if (errorMessage.IsNotNullOrEmpty())
                    {
                        Messages.Add(errorMessage);
                    }
                    ServiceResult = paymentResult;
                    return(ServiceResult);
                }
            }

            // payment is a success, save information to the database
            try
            {
                // Perform data access using the context
                using (var context = new HuskyRescueEntities())
                {
                    // convert to database object
                    var dbObj = eventReg.ToModel();

                    // add to the database and retrieve the updated object back (namely the GUID generated into the Id)
                    dbObj = context.Event_Registration.Add(dbObj);

                    // commit changes to the database
                    NumberChanges = context.SaveChanges();

                    // convert the database object back to a presentation object with included changes from the database (if any)
                    eventReg = dbObj.ToViewModel();
                }
            }
            catch (InvalidOperationException ex)
            {
                Trace.WriteLine(ex.Message);
                Messages.Add(ex.Message);
            }
            catch (DbEntityValidationException ex)
            {
                Messages.AddRange(Common.FormatEntityValidationError(ex));
            }

            // check if database changes were a success
            ServiceResult = NumberChanges > 0 ? ServiceResultEnum.Success : ServiceResultEnum.Failure;
            if (ServiceResult == ServiceResultEnum.Success)
            {
                Messages.Add("Registration saved to database successfully");
            }
            // if the save to database didn't work then keep going as the payment already processed.
            // TODO: log registration information to database for manual entry

            // send emails
            var emailSendResult = ServiceResultEnum.Failure;

            try
            {
                const string subject     = "2014 TXHR Golf Tournament";
                const string bodyAppHtml = @" 
Thank you for registering for Texas Husky Rescue's 4th Annual Golf Tournament at Coyote Ridge Golf Club!  We have no doubt you will have a fabulous time all while helping to support huskies in need throughout Texas.

You will be sent an email closer to the tournament with detailed information however if you have any questions prior to then, please feel free to email us at [email protected].

Thank you,
Texas Husky Rescue Golf Committee
1-877-TX-HUSKY (894-8759) (phone/fax)
PO Box 118891, Carrollton, TX 75011
";
                var          message     = new EmailMessage
                {
                    BodyTextExternal     = bodyAppHtml,
                    BodyTextInternal     = eventReg.RegistrationDescription,
                    Subject              = subject,
                    EmailAddressExternal = eventReg.Attendees[0].Person.Base.EmailAddresses[0].Address,
                    EmailAddressInternal = Settings.Default.ContactEmail,
                    NameInternal         = "Texas Husky Rescue",
                    NameExternal         = string.Empty
                };

                var emailMessageHandler = new EmailMessageHandler();
                emailSendResult = emailMessageHandler.SendMessage(ref message);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }

            if (emailSendResult == ServiceResultEnum.Success)
            {
                Messages.Add("Email confirmation sent");
            }

            return(ServiceResultEnum.Success);
        }