コード例 #1
0
ファイル: EmailService.cs プロジェクト: slashgg/passport
        public async Task <ServiceResult> SendPasswordResetEmailAsync(string token, string email)
        {
            var result = new ServiceResult();

            var user = await users.FindByEmailAsync(email);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UserNotFound),
                    Message = Errors.UserNotFound
                });
                result.Code = 404;

                return(result);
            }

            // We need to encode the token since it will be used in a reset link.
            var encodedToken = HttpUtility.UrlEncode(token);
            var baseUrl      = hosting.IsDevelopment() ? "https://localhost:52215" : "https://passport.slash.gg";
            var link         = $"{baseUrl}/password-reset?token={encodedToken}&id={user.Id}";
            var model        = new PasswordResetTemplateData {
                ResetLink = link,
                UserName  = user.UserName
            };

            var message = new SendGridMessage();

            message.SetupNoReplyMessage(PASSWORD_RESET_TEMPLATE_ID, email, model);

            var response = await client.SendEmailAsync(message);

            if (response.StatusCode != System.Net.HttpStatusCode.Accepted)
            {
                var raw = await response.Body.ReadAsStringAsync();

                var data = JsonConvert.DeserializeObject <SendGridError>(raw);

                foreach (var error in data.Errors)
                {
                    result.Errors.Add(new ServiceResult.Error
                    {
                        Key     = error.Field,
                        Message = error.Message
                    });
                }

                result.Code = 500;
            }

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Utilizes transactional templates and the SendGrid dynamic content API to create/send
        /// a password reset email.
        /// </summary>
        public Task ExecutePasswordReset(string apiKey, string email, string passResetUrl)
        {
            var dynamicTemplateData = new PasswordResetTemplateData()
            {
                PassResetUrl = passResetUrl
            };

            var client = new SendGridClient(apiKey);
            var msg    = new SendGridMessage()
            {
                TemplateId = "d-b42fcf5f2418464fb32a1178fdd53ad3",
                From       = new EmailAddress("*****@*****.**", Options.SendGridUser),
            };

            msg.SetTemplateData(dynamicTemplateData);
            msg.AddTo(new EmailAddress(email));

            // Disable click tracking.
            // See https://sendgrid.com/docs/User_Guide/Settings/tracking.html
            msg.SetClickTracking(false, false);

            return(client.SendEmailAsync(msg));
        }