示例#1
0
        public async Task <ActionResult> ForgotPassword(UserForgotPasswordViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("", "Неверные вводы");
                return(View(model));
            }

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

            if (user == null || !await _userManager.IsEmailConfirmedAsync(user))
            {
                ModelState.AddModelError("", "Небытие юзверя или нетвердый адрес электронной почты");
                return(View(model));
            }

            var code = await _userManager.GeneratePasswordResetTokenAsync(user);

            var callbackUrl = Url.Action(
                "ResetPassword",
                "Account",
                new { userId = user.Id, code = code },
                protocol: HttpContext.Request.Scheme);
            await _mailSender.SendMailAsync(user.Email, "Бросок пароля прогибом", $"Для броска пароля прогибом ступайте по мосту: <a href='{callbackUrl}'>мост</a>");

            // return View("ForgotPasswordConfirmation");
            return(RedirectToAction("ForgotPasswordConfirmation", "Account"));
        }
        public async Task Handle(FileProcessedEvent message)
        {
            try
            {
                Log.Logger.Information("Message received in SendEmailWithResults: {@message}", message);

                var body = _mailMessageService.GetTemplateBasedMailBody("ResultsMailTemplate.html", message.DataFolder,
                                                                        "*.*", message.Email);
                var attachmentPaths = Directory.GetFiles(message.DataFolder, "*.Rout");
                var httpStatusCode  = _mailSender.SendMailAsync(
                    message.Email,
                    _appSettings.CcAddress,
                    _appSettings.SenderAddress,
                    _appSettings.SubjectResults + " " + message.Id,
                    body,
                    attachmentPaths)
                                      .Result;

                Log.Logger.Information($"Result of mail sending: {httpStatusCode}");

                await _bus.Bus.PublishAsync(Mapper.Map <FileReadyForCleanupEvent>(message))
                .ConfigureAwait(false);
            }
            catch (Exception e)
            {
                Log.Logger.Error(e, "Error during results sending");
                throw;
            }
        }
示例#3
0
 private void Consumer_Received(object sender, BasicDeliverEventArgs ea)
 {
     try
     {
         _semaphore.Wait();
         MailMessageData message = _objectConvertFormat.JsonToObject <MailMessageData>(Encoding.UTF8.GetString(ea.Body));
         MessageReceived?.Invoke(this, message);
         // E-Posta akışını başlatma yeri
         Task.Run(() =>
         {
             try
             {
                 var task = _mailSender.SendMailAsync(message);
                 task.Wait();
                 var result = task.Result;
                 MessageProcessed?.Invoke(this, result);
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.InnerException.Message.ToString());
             }
             finally
             {
                 // Teslimat Onayı
                 _channel.BasicAck(ea.DeliveryTag, false);
                 // akışı - thread'i serbest bırakıyoruz ek thread alabiliriz.
                 _semaphore.Release();
             }
         });
     }
     catch (Exception ex)
     {
         throw new Exception(ex.InnerException.Message.ToString());
     }
 }
示例#4
0
        public async Task Handle(FileUploadedEvent message)
        {
            try
            {
                Log.Logger.Information("Message received in SendEmailConfirmingUpload: {@message}", message);

                var body = _mailMessageService.GetTemplateBasedMailBody("ConfirmationMailTemplate.html",
                                                                        message.DataFolder, "*.*", message.Email);
                var httpStatusCode = _mailSender.SendMailAsync(
                    message.Email,
                    _appSettings.CcAddress,
                    _appSettings.SenderAddress,
                    _appSettings.SubjectConfirmation + " " + message.Id,
                    body,
                    new string[] { })
                                     .Result;

                Log.Logger.Information($"Result of mail sending: {httpStatusCode}");

                await _bus.Bus.PublishAsync(Mapper.Map <FileReadyForProcessingEvent>(message))
                .ConfigureAwait(false);
            }
            catch (Exception e)
            {
                Log.Logger.Error(e, "Error during email confirmation sending");
                throw;
            }
        }
示例#5
0
        private async Task SendMailAsync(MailListSubscription reg, string fullTemplateName)
        {
            MailboxAddress fromAddress = new MailboxAddress(reg.MailList.FromEmailName, reg.MailList.FromEmailAddress);

            MailboxAddress[] toAddresses = new MailboxAddress[] { MailboxAddress.Parse(reg.EmailAddress) };
            MimeMessage      message     = await mailCreator.CreateMailAsync(fullTemplateName, reg, GetViewBagForTemplate(), null);

            await mailSender.SendMailAsync(GetMessages(reg, message, fromAddress, toAddresses), false);
        }
示例#6
0
        public async Task SendPasswordResetTokenAsync(Guid token, User recipient)
        {
            const string PasswordResetSubject = "Passwort zurücksetzen";
            string       message = $@"Hallo {recipient.FullName}

Soeben wurde eine Zurücksetzung des Passworts für diese E-Mail-Adresse beantragt. Der Code dafür lautet:

{token}

Sie können diesen Code unter {_baseWebUrl}ResetPassword eingeben und Ihr Passwort zurücksetzen.";

            await _mailSender.SendMailAsync(recipient.Email, PasswordResetSubject, message);

            _logger.LogInformation("{0}(userId={1}, userEmail={2}): Sent password reset token", nameof(SendPasswordResetTokenAsync), recipient.Id, recipient.Email);
        }
示例#7
0
        public async Task <Result> SendAsync(MessageTemplateType type,
                                             SystemMailEntity systemMail, object additionalData)
        {
            var result = GetMailResult(type, systemMail,
                                       additionalData, out MailEntity mail);

            if (result.Success == false)
            {
                return(result);
            }

            using (_mailSender)
            {
                await _mailSender.SendMailAsync(mail);
            }

            result = new Result(true,
                                $"Message sended to user({systemMail.To}).");

            return(result);
        }
示例#8
0
        public async Task <IActionResult> ForgotPassword(ForgotPasswordModel forgotPasswordModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(forgotPasswordModel));
            }
            var user = await _userManager.FindByEmailAsync(forgotPasswordModel.Email);

            /*güvenlik amacıyla kullanıcı yok diye bir mesaj vermiyoruz onun yerine onay sayfasına gönderiyoruz*/
            if (user == null)
            {
                return(RedirectToAction(nameof(ForgotPasswordConfirmation)));
            }

            var token = await _userManager.GeneratePasswordResetTokenAsync(user);

            var callback = Url.Action(nameof(ResetPassword), nameof(AccountController), new { token, email = user.Email }, Request.Scheme);

            var message = new Message(new string[] { forgotPasswordModel.Email }, "Reset Password", callback);
            await _emailSender.SendMailAsync(message);

            return(RedirectToAction(nameof(ForgotPasswordConfirmation)));
        }
示例#9
0
        /// <summary>
        /// Обработка события получения сообщений.
        /// Разблокировка метода (для дальнейшего получения сообщений из брокера) происходит
        /// по завершению обработки сообщения и высвобождению вакантного потока.
        /// </summary>
        private void Consumer_Received(object sender, BasicDeliverEventArgs ea)
        {
            /// Ожидание вакантного потока для продолжения выполнения метода
            _semaphore.Wait();

            var message = ParseMailMessageData(ea.Body);

            MessageReceived?.Invoke(this, message);

            /// Запуск потока отправки письма
            Task.Run(() => {
                try {
                    var task = _mailSender.SendMailAsync(message);
                    task.Wait();
                    var result = task.Result;
                    MessageProcessed?.Invoke(this, result);
                } finally {
                    /// Подтверждение доставки
                    _channel.BasicAck(ea.DeliveryTag, false);
                    /// Высвобождение потока
                    _semaphore.Release();
                }
            });
        }
示例#10
0
        public async Task SendBulkMail(MailList list, IMailCreator mailCreator, IMailSender mailSender, ExpandoObject viewBag,
                                       bool all, string fullTemplateName, string unsubscribeUrl)
        {
            MailDemonLog.Warn("Started bulk send for {0}", fullTemplateName);

            DateTime    now          = DateTime.UtcNow;
            int         successCount = 0;
            int         failCount    = 0;
            List <Task> pendingTasks = new List <Task>();
            Stopwatch   timer        = Stopwatch.StartNew();

            using (var db = dbProvider.GetDatabase())
            {
                void callbackHandler(MailListSubscription _sub, string error)
                {
                    lock (db)
                    {
                        // although this is slow, it is required as we do not want to double email people in the event
                        // that server reboots, loses power, etc. for every message we have to mark that person
                        // with the correct status immediately
                        _sub.Result          = error;
                        _sub.ResultTimestamp = DateTime.UtcNow;
                        db.Update(_sub);
                        db.SaveChanges();
                        if (string.IsNullOrWhiteSpace(error))
                        {
                            successCount++;
                        }
                        else
                        {
                            failCount++;
                        }
                    }
                }

                // use a separate database instance to do the query, that way we can update records in our other database instance
                // preventing locking errors, especially with sqlite drivers
                MailDemonLog.Warn("Begin bulk send");
                using (var dbBulk = dbProvider.GetDatabase())
                {
                    IEnumerable <KeyValuePair <string, IEnumerable <MailListSubscription> > > pendingSubs = dbBulk.GetBulkEmailSubscriptions(list, unsubscribeUrl, all);
                    foreach (KeyValuePair <string, IEnumerable <MailListSubscription> > sub in pendingSubs)
                    {
                        now = DateTime.UtcNow;
                        try
                        {
                            IAsyncEnumerable <MailToSend> messagesToSend = GetMessages(sub.Value, mailCreator, list, viewBag, fullTemplateName, callbackHandler);
                            Task task = mailSender.SendMailAsync(sub.Key, messagesToSend);
                            pendingTasks.Add(task);
                        }
                        catch (Exception ex)
                        {
                            MailDemonLog.Error(ex);
                        }
                    }
                }

                await Task.WhenAll(pendingTasks);

                MailDemonLog.Warn("Finished bulk send for {0}, {1} messages succeeded, {2} messages failed in {3:0.00} seconds.", fullTemplateName, successCount, failCount, timer.Elapsed.TotalSeconds);
            }

            GC.Collect();
        }