Example #1
0
        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);
        }
Example #5
0
        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);
        }
Example #12
0
        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);
            }
        }