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; } }
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()); } }
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; } }
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); }
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); }
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); }
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))); }
/// <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(); } }); }
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(); }