public void SeveFile(HttpPostedFileBase file, Func <string, string> mapPath, string prefix = null) { var fullPath = MakeFileName(file, mapPath, prefix); var ext = Path.GetExtension(fullPath); if (string.IsNullOrWhiteSpace(ext)) { var stackTrace = new StackTrace(true); var builder = new StringBuilder(); foreach (var r in stackTrace.GetFrames()) { builder.AppendLine($"Filename: {r.GetFileName()} Method: {r.GetMethod()} Line: {r.GetFileLineNumber()} Column: {r.GetFileColumnNumber()} "); } MailMessageService.SendMail(Constants.MainEmail, Constants.ErrorCaption, $@"Файл без расширения! fullPath: '{fullPath}' file.ContentLength: {file.ContentLength} file.ContentType: '{file.ContentType}' file.FileName: '{file.FileName}' file: '{file}' StackTrace: {builder} "); throw new ApplicationException("Надопустимо загружать файлы без расширений!"); } file.SaveAs(fullPath); if (string.IsNullOrEmpty(prefix)) { File.SetLastWriteTimeUtc(fullPath, this.ArticleDate.ToUniversalTime()); } }
private void TrySendMessage(Article article) { if (article.CurrentMessageText == null) { return; } var user = User.GetApplicationUser(db); var email = user.Email.Equals(Constants.MainEmail, StringComparison.OrdinalIgnoreCase) ? article.Owner.Email : Constants.MainEmail; var title = $"Коментраий к статье '{article.ShortArtTitles}'"; var text = $@"<html> <body> </body> <p><i>Это автоматическое уведомление. <b>Не отвечайте</b> на него.</i> Для ответа перейдите по ссылке ниже.</p> <p>Добавлен коментарий к статье <a href='{this.Action("Edit", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}.</p> <p>Текст сообщения:<br /> {article.CurrentMessageText.Replace(Environment.NewLine, "<br />\r\n")} </p> </html>"; MailMessageService.SendMail(email, title, text); MailMessageService.SendMail(Constants.MainEmail, title, text + "<br/>\r\n<br/>\r\n" + "Послано по адресу: <b>" + email + "</b>"); }
private static void Main(string[] args) { Log.Logger = StandardLoggerConfigurator.GetEnrichedLogger(); using (var wrapper = new TopshelfWrapper <Worker>( () => { Mapper.Initialize(cfg => { cfg.CreateMap <FileProcessedEvent, FileReadyForCleanupEvent>(); cfg.CreateMap <FileUploadedEvent, FileReadyForProcessingEvent>(); cfg.CreateMap <FileReadyForProcessingEvent, FileProcessedEvent>(); }); }, s => { var appSettings = new AppSettings(); var repository = new Repository(appSettings); var subscriptionService = new SubscriptionService(repository); var mailSender = new MailSender(); var radapter = new Radapter(appSettings); IBusAdapter bus = new BusAdapter(appSettings); var mailMessageService = new MailMessageService(appSettings, subscriptionService); s.ConstructUsing(name => new Worker(bus, appSettings, new HandleSendEmailConfirmingUpload(bus, mailMessageService, mailSender, appSettings), new HandleProcessUploadedFileThroughR(bus, appSettings, radapter), new HandleSendEmailWithResults(bus, mailMessageService, mailSender, appSettings), new HandleUpdateSubscriptionDatabase(subscriptionService))); })) { wrapper.Run(); } }
public async void SendMustSendMailAsync() { mockSmtpService.SetupGet(smtpService => smtpService.Address).Returns("*****@*****.**"); mockMessage.SetupGet(message => message.Subject).Returns("subject"); mockMessage.SetupGet(message => message.Body).Returns("body"); mockMessage.SetupGet(message => message.Destination).Returns("*****@*****.**"); MailMessageService messageService = new MailMessageService(mockSmtpService.Object); await messageService.SendAsync(mockMessage.Object); mockSmtpService.Verify(smtpService => smtpService.SendMailAsync(It.IsAny <MailMessage>()), Times.Once); }
public void SendReminderTest() { ReminderTask reminder = new ReminderTask() { Date = DateTime.Now, EmailAddress = "*****@*****.**", ID = Guid.NewGuid(), Name = "Test Bday" }; MailMessageService messageService = new MailMessageService(_logger); messageService.SendReminder(reminder); }
public async Task GetAsyncTestUnhappy() { // Arrange var mockMailMessageRepository = GetDefaultIMailMessageRepositoryInstance(); var mockIUnitOfWork = GetDefaultIUnitOfWorkInstance(); var mockCoordinatorRepository = GetDefaultICoordinatorRepositoryInstance(); var mailMessageId = 1; var service = new MailMessageService(mockMailMessageRepository.Object, mockCoordinatorRepository.Object, mockIUnitOfWork.Object); // Act MailMessageResponse result = await service.GetByIdAsync(mailMessageId); var message = result.Message; // Assert message.Should().Be("mail message not found"); }
private void TrySendMessage(Article article, Message msg) { var parent = article.Messages.FindParentMessageOpt(msg); ApplicationUser parentWriter = parent == null ? article.Owner : parent.Writer; ApplicationUser writer = User.GetApplicationUser(db); MailMessageService.SendMail(parentWriter.Email, $"Коментраий к статье {article.GetAuthorsBriefFios()} '{article.ShortArtTitles}'", $@"<html> <body> </body> <p><i>Это автоматическое уведомление. <b>Не отвечайте</b> на него.</i> Для ответа перейдите по ссылке ниже.</p> <p>Добавлен коментарий к статье <a href='{this.Action("Edit", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}.</p> <p>Автор: {writer.UserName} ({writer.Email})<br /> В ответ: {parentWriter.UserName} ({parentWriter.Email})</p> <p>Текст сообщения:<br /> {msg.Text.Replace(Environment.NewLine, "<br />\r\n")} </p> </html>"); }
public async Task PutAsyncTest() { // Arrange var mockMailMessageRepository = GetDefaultIMailMessageRepositoryInstance(); var mockIUnitOfWork = GetDefaultIUnitOfWorkInstance(); var mockCoordinatorRepository = GetDefaultICoordinatorRepositoryInstance(); Coordinator coordinator = new Coordinator(); int coordinatorId = 1; coordinator.Id = coordinatorId; MailMessage mailMessage = new MailMessage(); var mailMessageId = 1; mailMessage.Id = mailMessageId; mailMessage.CoordinatorId = coordinatorId; mailMessage.DocumentLink = "drive.sem5"; MailMessage mailMessageExpected = new MailMessage(); mailMessageExpected.CoordinatorId = 1; mailMessageExpected.DocumentLink = "mega.sem5"; mockMailMessageRepository.Setup(r => r.FindById(mailMessageId)) .Returns(Task.FromResult <MailMessage>(mailMessage)); mockCoordinatorRepository.Setup(r => r.FindById(coordinatorId)) .Returns(Task.FromResult <Coordinator>(coordinator)); var service = new MailMessageService(mockMailMessageRepository.Object, mockCoordinatorRepository.Object, mockIUnitOfWork.Object); // Act MailMessageResponse result = await service.UpdateASync(mailMessageId, mailMessage.CoordinatorId, mailMessageExpected); // Assert Assert.AreEqual(mailMessageExpected.DocumentLink, result.Resource.DocumentLink); }
public async Task PostAsyncTestHappy() { // Arrange var mockMailMessageRepository = GetDefaultIMailMessageRepositoryInstance(); var mockIUnitOfWork = GetDefaultIUnitOfWorkInstance(); var mockCoordinatorRepository = GetDefaultICoordinatorRepositoryInstance(); MailMessage mailMessage = new MailMessage(); var mailMessageId = 1; mailMessage.Id = mailMessageId; var service = new MailMessageService(mockMailMessageRepository.Object, mockCoordinatorRepository.Object, mockIUnitOfWork.Object); // Act MailMessageResponse result = await service.SaveAsync(mailMessage, 1); // Assert var message = result.Message; message.Should().Be(""); }
private void SaveArticleFile(Article article, HttpPostedFileBase articleFile, ArticleStatus prevStatus) { var versionsOld = article.GetFileVersions(Server.MapPath); article.SeveFile(articleFile, Server.MapPath); if (prevStatus != ArticleStatus.RequiresVerification && article.Status != ArticleStatus.NewVersion) { article.Status = ArticleStatus.NewVersion; var versionsNew = article.GetFileVersions(Server.MapPath); MailMessageService.SendMail(Constants.MainEmail, $"Изменена версия файла к статье id{article.Id} '{article.ShortArtTitles}', авторов: {article.GetAuthorsBriefFios()}", $@"<html> <body> </body> <p><i>Это автоматическое уведомление.</p> <p>В статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: <b>{article.GetAuthorsBriefFios()}</b> был <b>изменен файл</b> статьи. </p> <p>Предыдущий статус: {prevStatus}</p> </html>"); } }
public async Task GetAsyncTestHappy() { // Arrange var mockMailMessageRepository = GetDefaultIMailMessageRepositoryInstance(); var mockIUnitOfWork = GetDefaultIUnitOfWorkInstance(); var mockCoordinatorRepository = GetDefaultICoordinatorRepositoryInstance(); MailMessage mailMessage = new MailMessage(); var mailMessageId = 1; mailMessage.Id = mailMessageId; mockMailMessageRepository.Setup(r => r.FindById(mailMessageId)) .Returns(Task.FromResult <MailMessage>(mailMessage)); var service = new MailMessageService(mockMailMessageRepository.Object, mockCoordinatorRepository.Object, mockIUnitOfWork.Object); // Act MailMessageResponse result = await service.GetByIdAsync(mailMessageId); // Assert Assert.AreEqual(mailMessage, result.Resource); }
public void SendVerificationMailTest() { MailMessageService messageService = new MailMessageService(_logger); messageService.SendVerificationEmail("*****@*****.**", Guid.NewGuid()); }
public ActionResult UploadAntiplagiat([Bind(Include = "Id")] Article article) { Article orig = db.Articles.Include(a => a.Messages).Include(a => a.Authors.Select(x => x.Owner)).Include(a => a.Authors).Include(a => a.Owner).Include(a => a.Issue) .FilterByOwner(User) .SingleOrDefault(a => a.Id == article.Id); if (orig == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } HttpPostedFileBase antiplagiatApdx = Request.Files["antiplagiatApdx"]; HttpPostedFileBase antiplagiatPdf = Request.Files["antiplagiatPdf"]; if (antiplagiatPdf?.ContentLength > 0 && antiplagiatApdx?.ContentLength > 0) { if (!Path.GetExtension(antiplagiatPdf.FileName).Equals(".pdf", StringComparison.OrdinalIgnoreCase)) { ModelState.AddModelError("UploadAntiplagiatValidation", "В первом поле должен быть .pdf!"); return(View("Details", orig)); } if (!Path.GetExtension(antiplagiatApdx.FileName).Equals(".apdx", StringComparison.OrdinalIgnoreCase)) { ModelState.AddModelError("UploadAntiplagiatValidation", "Во втором поле должен быть .apdx!"); return(View("Details", orig)); } orig.SeveFile(antiplagiatApdx, Server.MapPath, Constants.AntiplagiatApdxPrefix); orig.SeveFile(antiplagiatPdf, Server.MapPath, Constants.AntiplagiatPdfPrefix); MailMessageService.SendMail(orig.Owner.Email, $"Загружен отчет antiplagiat.ru к статье id{orig.Id} '{orig.ShortArtTitles}', автор{orig.AuthorsPlural}: {orig.GetAuthorsBriefFios()}", $@"<html> <body> <p><i>Это автоматическое уведомление.</p> <p>Обратите внимание на то, что <b>статья еще не обработана редактором</b>. Это всего лишь оповещение о ходе обработки статьи. Через некоторое время <b>Вам будет выслано уведомление о принятии статьи или письмо с замечаниями</b>, которые нужно исправить. </p> <p>К статье '<a href='{this.Action("Details", "Articles", new { id = orig.Id })}'>{orig.ShortArtTitles}</a>', автор{orig.AuthorsPlural}: <b>{orig.GetAuthorsBriefFios()}</b> был добавлен отчет Antiplagiat.ru. </p> <p>Вы можете скачать его <a href='{this.Action("AntiplagiatPdf", "Articles", new { id = orig.Id })}'>PDF-версию</a>.</p> <p>Или его <a href='{this.Action("AntiplagiatApdx", "Articles", new { id = orig.Id })}'>APDX-версию</a>.</p> <p>Для просмотра APDX-версии Вам придется загрузить <a href='http://www.antiplagiat.ru/Page/Antiplagiat-report-viewer'>Antiplagiat ReportViewer</a>.</p> </body> </html>"); switch (orig.Status) { case ArticleStatus.RequiresVerification: case ArticleStatus.AddedToAntiplagiat: case ArticleStatus.NewVersion: orig.Status = ArticleStatus.AntiplagiatReportLoaded; orig.Agreed = true; db.SaveChanges(); break; } } else { ModelState.AddModelError("UploadAntiplagiatValidation", "Вы дожны задать одноверменно обва варианта отчета antiplagiat.ru .apdx и .pdf!"); return(View("Details", orig)); } return(RedirectToAction("Details", new { id = article.Id })); }
private void TryAddAcceptedMessage(Article article, ArticleStatus prevStatus) { if (article.Status == ArticleStatus.Accepted && prevStatus != ArticleStatus.Accepted) { var title = $"Статья № {article.Id} принята к публикации. Сокращенное название: '{article.ShortArtTitles}'"; var text = $@"<html> <body> <p><i>Это автоматическое уведомление!</p> <p>Статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()} <b>принята</b> к публикации в № {article.IssueNumber} за {article.IssueYear}. </p> </body> </html>"; MailMessageService.SendMail(Constants.ImposerEmail, title, text); var month = BlackHolesExtensions.PublicationMonth(article.IssueNumber); text = $@"<html> <body> <p><i>Это автоматическое уведомление!</p> <p> Ваша статья принята к публикации в № {article.IssueNumber} за {article.IssueYear} год журнала {Constants.Jur}, который <b>выйдет в {month}</b>. При сдаче номера в печать Вы получите уведомление, содержащее: номера страниц, титульный лист, оглавление и PDF вашей статьи. Реквизиты для оплаты публикации: http://www.k-press.ru/bh/Articles/PaymentDetails/{article.Id} </p> </body> </html>"; MailMessageService.SendMail(article.Owner.Email, title, text); MailMessageService.SendMail(Constants.MainEmail, title, text); } else if (article.Status == ArticleStatus.Paid && prevStatus != ArticleStatus.Paid) { var title = $"Получена оплата по статье № {article.Id}. Сокращенное название: '{article.ShortArtTitles}'"; var text = $@" <html> <body> <p> Получена оплата (без доставки) по статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()} </p> </body> </html>"; MailMessageService.SendMail(article.Owner.Email, title, text); MailMessageService.SendMail(Constants.MainEmail, title, text); } else if (article.Status == ArticleStatus.PaidDelivery && prevStatus != ArticleStatus.PaidDelivery) { var hasAdress = article.Authors.Any(a => !string.IsNullOrWhiteSpace(a.PostalAddress)); var builder = new StringBuilder(); if (hasAdress) { builder.AppendLine("<p>Проверьте адреса по которым будут направлены журналы, в случае оплаты доставки:</p>"); } else { builder.AppendLine($@"<p><b>Внимание!</b> Ни у одного автора не указаны реквизиты доставки. Укажите адрес доставки в реквизитах одного из авторов.</p>"); builder.AppendLine(); } foreach (var a in article.Authors) { var address = string.IsNullOrWhiteSpace(a.PostalAddress) ? "Адрес не указан!" : a.PostalAddress; var index = string.IsNullOrWhiteSpace(a.Postcode) ? @"<b>Не указан индекс!</b> " : $"{a.Postcode}, "; var line = $@"{index}<a href='http://www.k-press.ru/bh/Authors/Edit/{a.Id}#PostRequisites'>{address}</a><br/>"; builder.AppendLine(line); } var title = $"Получена оплата по статье № {article.Id}. Сокращенное название: '{article.ShortArtTitles}'"; var text = $@" <html> <body> <p> Получена оплата по статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()} </p> {builder} </body> </html>"; MailMessageService.SendMail(article.Owner.Email, title, text); MailMessageService.SendMail(Constants.MainEmail, title, text); } }