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>"); }
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()); } }
public IHttpActionResult PostMail([FromBody] dtoMailMessage mailToSend) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } return(Ok(mailMessageService.SendMail(mailToSend))); } catch (Exception ex) { return(InternalServerError(new Exception(ex.Message))); } }
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>"); }
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 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); } }