public async Task <SendEmailResponse> SendGeneralEmailAsync(SendEmailDetails details, string title, string content1, string content2, string buttonText, string buttonUrl)
        {
            var templateText = default(string);

            //read general template from file
            using (var reader = new StreamReader(Path.Combine("Email/Templates/GeneralTemplate.html"), Encoding.UTF8))
            {
                templateText = await reader.ReadToEndAsync();
            }

            //replace special values
            templateText = templateText
                           .Replace("--Title--", title)
                           .Replace("--Content1--", content1)
                           .Replace("--Content2--", content2)
                           .Replace("--ButtonText--", buttonText)
                           .Replace("--ButtonUrl--", buttonUrl);

            //set details content
            details.Content = templateText;

            var emailSender = Ioc.IoC.EmailSender;

            return(await Ioc.IoC.EmailSender.SendEmailAsync(details));
        }
Beispiel #2
0
        public async Task <SendEmailResponse> SendGeneralEmailAsync(SendEmailDetails details, string title, string content1, string content2, string buttonContent, string buttonUrl)
        {
            var templateText = default(string);

            // Read the general template from file
            // TODO: Replace with IoC Flat data provider
            using (var reader = new StreamReader(Assembly.GetEntryAssembly().GetManifestResourceStream("Quan.Word.Web.Server.Email.Templates.GeneralTemplate.html"), Encoding.UTF8))
            {
                // Read file contents
                templateText = await reader.ReadToEndAsync();
            }

            // Replace special values with those inside the template
            templateText = templateText.Replace("--Title--", title)
                           .Replace("--Content1--", content1)
                           .Replace("--Content2--", content2)
                           .Replace("--ButtonContent--", buttonContent)
                           .Replace("--ButtonUrl--", buttonUrl);

            // Set the details content to this template content
            details.Content = templateText;

            // Send Email
            return(await DI.EmailSender.SendEmailAsync(details));
        }
        public async Task <ResponseError> SendEmailAsync(SendEmailDetails details)
        {
            var apiKey = _configuration["SendGrid:InstaSendApiKey"];

            var client = new SendGridClient(apiKey);

            var from = new EmailAddress(details.FromEmail, details.FromName);

            var to = new EmailAddress(details.ToEmail, details.ToName);

            var subject = details.Subject;

            var message = MailHelper.CreateSingleEmail(
                from,
                to,
                subject,
                details.IsHtml ? null : details.Content,
                details.IsHtml ? details.Content : null);

            var response = await client.SendEmailAsync(message);

            if (response.StatusCode == HttpStatusCode.Accepted)
            {
                return(new ResponseError());
            }
            else
            {
                var bodyResult = await response.Body.ReadAsStringAsync();

                var sendEmailResponse = JsonConvert.DeserializeObject <ResponseError>(bodyResult);

                return(sendEmailResponse);
            }
        }
Beispiel #4
0
        public async Task SendOrderMail(OrderDetailsViewModel model)
        {
            string content = CreateEmaiContent(model.Email);

            SendEmailDetails details = new SendEmailDetails()
            {
                FromEmail = this.provider.GetService <IConfiguration>()["VerificationEmailDetails:FromEmail"],
                FromName  = this.provider.GetService <IConfiguration>()["VerificationEmailDetails:FromName"],
                ToEmail   = model.Email,
                ToName    = model.FirstName + " " + model.LastName,
                Subject   = "Confirmation of you CakeIt order.",
                Content   = content
            };

            var sendEmailResult = await this.provider.GetService <ICustomEmilSender>().SendEmailAsync(details);

            if (!sendEmailResult.Successful)
            {
                foreach (var error in sendEmailResult.Errors)
                {
                    this.logger.LogDebug(error);
                }
            }

            this.cartService.EmptyCart();
        }
        public async Task <IActionResult> OnPostSendVerificationEmailAsync()
        {
            if (!ModelState.IsValid)
            {
                var errors = this.ModelState.Values.SelectMany(p => p.Errors).Select(e => e.ErrorMessage).ToArray();

                this._provider.GetService <IErrorService>().PassErrorParam(errors);

                return(RedirectToPage("/Error"));
            }

            var user = await _userManager.GetUserAsync(User);

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


            var userId = await _userManager.GetUserIdAsync(user);

            var email = await _userManager.GetEmailAsync(user);

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

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

            string content = CreateEmaiContent(Input.Email, callbackUrl);

            SendEmailDetails details = new SendEmailDetails()
            {
                FromEmail = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromEmail"],
                FromName  = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromName"],
                ToEmail   = Input.Email,
                ToName    = Input.Email,
                Subject   = "Confirm your email.",
                Content   = content
            };

            var sendEmailResult = await this._provider.GetService <ICustomEmilSender>().SendEmailAsync(details);

            if (!sendEmailResult.Successful)
            {
                var mailErrors = sendEmailResult.Errors;

                this._provider.GetService <IErrorService>().PassErrorParam(mailErrors);

                return(RedirectToPage("/Error"));
            }

            StatusMessage = "Verification email sent. Please check your email.";

            return(RedirectToPage());
        }
Beispiel #6
0
        public async Task <SendEmailResponse> SendEmailAsync(SendEmailDetails details)
        {
            var apiKey  = Configuration["SendGridKey"];
            var client  = new SendGridClient(apiKey);
            var from    = new EmailAddress(details.FromEmail, details.FromName);
            var to      = new EmailAddress(details.ToEmail, details.ToName);
            var subject = details.Subject;
            var content = details.Content;

            var msg = MailHelper.CreateSingleEmail(
                from,
                to,
                subject,
                details.IsHtml ? null : details.Content,
                details.IsHtml ? details.Content : null);

            var response = await client.SendEmailAsync(msg);

            if (response.StatusCode == HttpStatusCode.Accepted)
            {
                return(new SendEmailResponse());
            }

            try
            {
                var bodyResult = await response.Body.ReadAsStringAsync();

                var sendGridResponse = JsonConvert.DeserializeObject <SendGridResponse>(bodyResult);
                var errorResponse    = new SendEmailResponse
                {
                    Errors = sendGridResponse?.Errors.Select(f => f.Message).ToList()
                };
                if (errorResponse.Errors == null || errorResponse.Errors.Count == 0)
                {
                    // Add an unknown error
                    // TODO: Localization
                    errorResponse.Errors = new List <string>(new[] { "Unknown error from email sending service. Please contact Synthesis support." });
                }

                return(errorResponse);
            }
            catch (Exception ex)
            {
                // TODO: Localization
                // Break if we are debugging
                if (Debugger.IsAttached)
                {
                    var error = ex;
                    Debugger.Break();
                }

                return(new SendEmailResponse
                {
                    Errors = new List <string>(new[] { "Unknown error occurred" })
                });
            }
        }
        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);

                var callbackUrl = Url.Page(
                    "/Account/ResetPassword",
                    pageHandler: null,
                    values: new { code },
                    protocol: Request.Scheme);

                string content = CreateEmaiContent(Input.Email, callbackUrl);

                //if the mail is html the link shoul be HtmlEncoder.Default.Encode(callbackUrl).
                SendEmailDetails details = new SendEmailDetails()
                {
                    FromEmail = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromEmail"],
                    FromName  = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromName"],
                    ToEmail   = Input.Email,
                    ToName    = Input.Email,
                    Subject   = "Reset Password",
                    Content   = content
                };

                var sendEmailResult = await this._provider.GetService <ICustomEmilSender>().SendEmailAsync(details);

                if (!sendEmailResult.Successful)
                {
                    var errors = sendEmailResult.Errors;

                    this._provider.GetService <IErrorService>().PassErrorParam(errors);

                    return(RedirectToPage("/Error"));
                }

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

            return(Page());
        }
Beispiel #8
0
        public async Task <IActionResult> SendEmailAsync(SendEmailDetails emailDetails)
        {
            emailDetails.ToEmail   = _configuration["Email"];
            emailDetails.ToName    = _configuration["EmailName"];
            emailDetails.FromEmail = _configuration["Email"];
            var result = await _emailSender.SendEmailAsync(emailDetails);

            if (result.Successful != true)
            {
                ModelState.AddModelError(string.Empty, "Email sender error!");
                return(View("Contact", emailDetails));
            }

            return(RedirectToAction("Contact"));
        }
        public async Task <SendEmailResponse> SendGeneratedEmailAsync(SendEmailDetails details, string title, string content, string content2, string buttonText, string buttonUrl)
        {
            var templateText = default(string);

            using (var reader = new StreamReader(Assembly.GetEntryAssembly().GetManifestResourceStream("Mailer.Templates.MailerTemplate.html"), Encoding.UTF8))
            {
                templateText = await reader.ReadToEndAsync();
            }


            templateText = templateText.Replace("--Title--", title).Replace("--Content1--", content).Replace("--Content2--", content2)
                           .Replace("--ButtonText--", buttonText).Replace("--ButtonUrl--", buttonUrl);

            details.BodyContent = templateText;

            return(await _sender.SendEmailAsync(details));
        }
Beispiel #10
0
        public async Task <IActionResult> Reserve(Reservation reservation)
        {
            reservation.ClientId = _userManager.GetUserId(User);
            reservation.IsActive = true;
            reservation.IsCancel = false;
            var apartment = _context.Apartments.FirstOrDefault(a => a.Id == reservation.ApartmentId);
            var days      = (reservation.TimeTo.Ticks - reservation.TimeFrom.Ticks) / 863850233856;

            reservation.Price = (int)days * apartment.Price;

            _context.Add(reservation);
            _context.SaveChanges();

            var owner    = _context.Owners.FirstOrDefault(o => o.Id == apartment.OwnerId);
            var clientId = _userManager.GetUserId(User);
            var client   = _context.Users.FirstOrDefault(c => c.Id == clientId);

            var emailDetails = new SendEmailDetails
            {
                FromName     = _configuration["EmailName"],
                FromEmail    = _configuration["Email"],
                ToEmail      = client.Email,
                ToName       = client.UserName,
                TemplateId   = _configuration["TemplateIdInvoice"],
                TemplateData = new EmailTemplateData
                {
                    Number           = reservation.Id,
                    Date             = DateTime.Now.ToShortDateString(),
                    Owner            = owner.UserName,
                    OwnerEmail       = owner.Email,
                    ApartmentName    = apartment.Name,
                    ReservationPrice = reservation.Price
                }
            };
            var result = await _sender.SendEmailAsync(emailDetails);

            if (result.Successful == false)
            {
                _context.Remove(reservation);
                _context.SaveChanges();

                return(View("ReservationError", reservation));
            }

            return(RedirectToAction("Index"));
        }
Beispiel #11
0
        public async Task <SendEmailResponse> SendGeneralEmailAsync(SendEmailDetails details, string confirmationUrl)
        {
            // Read the general template from file
            var stream = new FileStream(@"Statics\GeneralTemplate.txt", FileMode.Open);

            using var reader = new StreamReader(stream, Encoding.UTF8);
            string templateText = await reader.ReadToEndAsync();

            // Replace special values with those inside the template
            templateText = templateText.Replace("--Title--", details.Subject)
                           .Replace("--UserName--", details.ToName)
                           .Replace("--Content--", details.Content)
                           .Replace("--confirmationUrl--", confirmationUrl);

            // Set the details content to this template content
            details.Content = templateText;

            return(await SendEmailAsync(details.Subject, details.Content, details.ToEmail));
        }
        public async Task <ResponseError> SendGeneralEmailAsync(SendEmailDetails details, string title, string content1, string content2, string buttonText, string buttonUrl)
        {
            string templateText;

            using (var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("Infrastructure.Email.Templates.GeneralTemplate.htm") !, Encoding.UTF8))
            {
                templateText = await reader.ReadToEndAsync();
            }

            templateText = templateText
                           .Replace("--Title--", title)
                           .Replace("--Content1--", content1)
                           .Replace("--Content2--", content2)
                           .Replace("--ButtonText--", buttonText)
                           .Replace("--ButtonUrl--", buttonUrl);

            details.Content = templateText;

            return(await _emailSender.SendEmailAsync(details));
        }
        public async Task <SendEmailResponse> SendEmailAsync(SendEmailDetails details)
        {
            // Get the SendGrid key
            var apiKey = Configuration["SendGridKey"];

            // Create a new SendGrid client
            var client = new SendGridClient(apiKey);

            // From
            var from = new EmailAddress(details.FromEmail, details.FromName);

            // To
            var to = new EmailAddress(details.ToEmail, details.ToName);

            // Subject
            var subject = details.Subject;

            // Content
            var content = details.Content;

            // Create Email class ready to send
            var msg = MailHelper.CreateSingleEmail(
                from,
                to,
                subject,
                // Plain content
                details.IsHTML ? null : details.Content,
                // HTML content
                details.IsHTML ? details.Content : null);

            // Finally, send the email...
            var response = await client.SendEmailAsync(msg);

            // If we succeeded...
            if (response.StatusCode == System.Net.HttpStatusCode.Accepted)
            {
                // Return successful response
                return(new SendEmailResponse());
            }

            // Otherwise, it failed...

            try
            {
                // Get the result in the body
                var bodyResult = await response.Body.ReadAsStringAsync();

                // Deserialize the response
                var sendGridResponse = JsonConvert.DeserializeObject <SendGridResponse>(bodyResult);

                // Add any errors to the response
                var errorResponse = new SendEmailResponse
                {
                    Errors = sendGridResponse?.Errors.Select(f => f.Message).ToList()
                };

                // Make sure we have at least one error
                if (errorResponse.Errors == null || errorResponse.Errors.Count == 0)
                {
                    // Add an unknown error
                    // TODO: Localization
                    errorResponse.Errors = new List <string>(new[] { "Unknown error from email sending service. Please contact Fasetto support." });
                }

                // Return the response
                return(errorResponse);
            }
            catch (Exception ex)
            {
                // TODO: Localization

                // Break if we are debugging
                if (Debugger.IsAttached)
                {
                    var error = ex;
                    Debugger.Break();
                }

                // If something unexpected happened, return message
                return(new SendEmailResponse
                {
                    Errors = new List <string>(new[] { "Unknown error occurred" })
                });
            }
        }
Beispiel #14
0
        public async Task <IActionResult> OnGetAsync(string email, string returnUrl = null)
        {
            if (email == null)
            {
                return(RedirectToPage("/Index"));
            }

            var user = await _userManager.FindByEmailAsync(email);

            if (user == null)
            {
                return(NotFound($"Unable to load user with email '{email}'."));
            }

            Email = email;


            // Once you add a real email sender, you should remove this code that lets you confirm the account
            //DisplayConfirmAccountLink = true;
            if (DisplayConfirmAccountLink)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

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

            else
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

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


                var emailDetails = new SendEmailDetails
                {
                    FromName     = _configuration["EmailName"],
                    FromEmail    = _configuration["Email"],
                    ToEmail      = Email,
                    TemplateId   = _configuration["TemplateIdVerify"],
                    TemplateData = new EmailTemplateData
                    {
                        ActionUrl = EmailConfirmationUrl
                    }
                };

                ThisPageUrl = $"/Identity/Account/RegisterConfirmation?email={Email}&returnUrl={returnUrl}";

                var result = await _sender.SendEmailAsync(emailDetails);

                Error = !(result.Successful);
            }

            return(Page());
        }
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new CakeItUser {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

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

                    IdentityResult asigneRoleResult = await _userManager.AddToRoleAsync(user, "User");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { userId = user.Id, code = code },
                        protocol: Request.Scheme);

                    string content = CreateEmaiContent(Input.Email, callbackUrl);

                    SendEmailDetails details = new SendEmailDetails()
                    {
                        FromEmail = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromEmail"],
                        FromName  = this._provider.GetService <IConfiguration>()["VerificationEmailDetails:FromName"],
                        ToEmail   = Input.Email,
                        ToName    = Input.Email,
                        Subject   = "Confirm your email.",
                        Content   = content
                    };

                    var sendEmailResult = await this._provider.GetService <ICustomEmilSender>().SendEmailAsync(details);

                    if (!sendEmailResult.Successful)
                    {
                        var mailErrors = sendEmailResult.Errors;

                        this._provider.GetService <IErrorService>().PassErrorParam(mailErrors);

                        return(RedirectToPage("/Error"));
                    }

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }

                var errors = this.ModelState.Values.SelectMany(p => p.Errors).Select(e => e.ErrorMessage).ToArray();

                this._provider.GetService <IErrorService>().PassErrorParam(errors);

                return(RedirectToPage("/Error"));
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }