/// <summary> /// Отправка письма пользователям по группе /// </summary> /// <param name="mailOutlook">Письма заступившие</param> /// <param name="arrayUsers">Рассылка пользователям</param> public void SendMailIn(MailLotusOutlookIn mailOutlook, List <string> arrayUsers) { Db.LotusConnectedDataBaseServer(Config.LotusServer, Config.LotusMailSend); Db.DeleteDataBaseAllMailSizeWarning(); DocumentGenerationAllDxl document = new DocumentGenerationAllDxl(Db.Db); document.DocumentGenerationMailMemo(arrayUsers, "От кого: " + mailOutlook.MailAdress + " Тема: " + mailOutlook.SubjectMail, Db.Session.UserName, mailOutlook.Body, mailOutlook.FullPathFile); DonloadOnCreateDxlFile download = new DonloadOnCreateDxlFile(); download.DxlFileSave(Config.PathGenerateScheme, document.Document, typeof(note)); var noteId = download.ImportDxlFile(Config.PathGenerateScheme, Db.Db); if (noteId != null) { var docSave = Db.Db.GetDocumentByID(noteId); docSave.Send(false); } }
/// <summary> /// Рассылка писем если пришло Html В случае если зашло Html /// </summary> /// <param name="mailOutlook">Письма заступившие</param> /// <param name="arrayUsers">Рассылка пользователям</param> public void SendMailMimeHtml(MailLotusOutlookIn mailOutlook, List <string> arrayUsers) { Db.LotusConnectedDataBaseServer(Config.LotusServer, Config.LotusMailSend); NotesStream = Db.Db.Parent.CreateStream(); Document = Db.Db.CreateDocument(); try { if (Db.Db == null) { throw new InvalidOperationException("Фатальная ошибка нет соединения с сервером!"); } Db.DeleteDataBaseAllMailSizeWarning(); Document.AppendItemValue("Subject", "От кого: " + mailOutlook.MailAdress + " Тема: " + mailOutlook.SubjectMail); Document.AppendItemValue("Recipients", Db.Session.UserName); Document.AppendItemValue("OriginalTo", Db.Session.UserName); Document.AppendItemValue("From", Db.Session.UserName); Document.AppendItemValue("OriginalFrom", Db.Session.UserName); Document.AppendItemValue("SendTo", arrayUsers.ToArray()); var mimeEntity = Document.CreateMIMEEntity(); var mimeHeader = mimeEntity.CreateHeader("MIME-Version"); mimeHeader.SetHeaderVal("1.0"); mimeHeader = mimeEntity.CreateHeader("Content-Type"); mimeHeader.SetHeaderValAndParams("multipart/mixed"); var mimeChild = mimeEntity.CreateChildEntity(); NotesStream.WriteText(mailOutlook.Body); mimeChild.SetContentFromText(NotesStream, "text/html;charset=\"utf-8\"", MIME_ENCODING.ENC_NONE); mimeChild = mimeEntity.CreateChildEntity(); if (File.Exists(mailOutlook.FullPathFile)) { NotesStream.Truncate(); NotesStream.Open(mailOutlook.FullPathFile); mimeHeader = mimeChild.CreateHeader("Content-Disposition"); mimeHeader.SetHeaderVal($"attachment; filename=\"{mailOutlook.NameFile}\""); mimeChild.SetContentFromBytes(NotesStream, $"application/zip; name=\"{mailOutlook.NameFile}\"", MIME_ENCODING.ENC_IDENTITY_BINARY); } Document.CloseMIMEEntities(true); Db.Db.Parent.ConvertMime = true; if (Document.ComputeWithForm(true, false)) { Document.Save(true, true); Document.Send(false); NotesStream.Truncate(); NotesStream.Close(); } } catch (Exception e) { Loggers.Log4NetLogger.Error(new Exception("В рассылке Html письма возникла ошибка!")); Loggers.Log4NetLogger.Error(e); } finally { if (Document != null) { Marshal.ReleaseComObject(Document); } Document = null; if (NotesStream != null) { Marshal.ReleaseComObject(NotesStream); } NotesStream = null; } }
/// <summary> /// Пересылка с почты oit на пользователей Lotus /// </summary> /// <param name="parameters"></param> public void StartMessageOit(ConfigFile.ConfigFile parameters) { try { int count = 0; ZipAttachments zip = new ZipAttachments(); using (Pop3Client client = new Pop3Client()) { client.CheckCertificateRevocation = false; client.Connect(parameters.Pop3Address, 995, true); MailSender mail = new MailSender(); Loggers.Log4NetLogger.Info(new Exception($"Соединение с сервером eups.tax.nalog.ru установлено (OIT)")); client.Authenticate(parameters.LoginOit, parameters.PasswordOit); Loggers.Log4NetLogger.Info(new Exception($"Пользователь проверен (OIT)")); if (client.IsConnected) { MailLogicLotus mailSave = new MailLogicLotus(); SelectSql select = new SelectSql(); UserLotus userSqlDefault = select.FindUserGroup(7); int messageCount = client.GetMessageCount(); for (int i = 0; i < messageCount; i++) { MimeMessage message = client.GetMessage(i); var messageAttaches = message.Attachments as List <MimeEntity> ?? new List <MimeEntity>(); var messageBodyAttaches = new List <MimeEntity>(); messageBodyAttaches.AddRange(message.BodyParts); var calendar = messageBodyAttaches.Where(x => x.ContentType.MimeType == "text/calendar").ToList(); var file = messageBodyAttaches.Where(x => x.ContentType.MediaType == "image" || x.ContentType.MediaType == "application").ToList(); if (file.Count > 0) { messageAttaches.AddRange(file); } string body; var isHtmlMime = false; if (string.IsNullOrWhiteSpace(message.TextBody)) { body = message.HtmlBody; isHtmlMime = true; } else { body = message.TextBody; } var date = message.Date; if (date.Date >= DateTime.Now.Date) { if (!mailSave.IsExistsBdMail(message.MessageId)) { if (calendar.Count > 0) { var calendarVks = new CalendarVks(); body = calendarVks.CalendarParser(calendar, message); } var address = (MailboxAddress)message.From[0]; var mailSender = address.Address; var nameFile = date.ToString("dd.MM.yyyy_HH.mm.ss") + "_" + mailSender.Split('@')[0] + ".zip"; var fullPath = Path.Combine(parameters.PathSaveArchive, nameFile); MailLotusOutlookIn mailMessage = new MailLotusOutlookIn() { IdMail = message.MessageId, MailAdressSend = parameters.LoginOit, SubjectMail = message.Subject, Body = body, MailAdress = mailSender, DateInputServer = date.DateTime, NameFile = nameFile, FullPathFile = fullPath, FileMail = zip.StartZipArchive(messageAttaches, fullPath) }; mailSave.AddModelMailIn(mailMessage); var mailUsers = mail.FindUserLotusMail(select.FindUserOnUserGroup(userSqlDefault, mailMessage.SubjectMail), "(OIT)"); if (!string.IsNullOrWhiteSpace(message.HtmlBody)) { var math = Regex.Match(body, @"CN=(.+)МНС"); if (!string.IsNullOrWhiteSpace(math.Value)) { mailUsers.Add(math.Value); } } if (isHtmlMime) { mail.SendMailMimeHtml(mailMessage, mailUsers); } else { mail.SendMailIn(mailMessage, mailUsers); } count++; Loggers.Log4NetLogger.Info(new Exception($"УН: {mailMessage.IdMail} Дата/Время: {date} От кого: {mailMessage.MailAdress}")); } } else { //Удаление сообщения/письма client.DeleteMessage(i); } } mailSave.Dispose(); Loggers.Log4NetLogger.Info(new Exception("Количество пришедшей (OIT) почты:" + count)); } mail.Dispose(); client.Disconnect(true); } //Очистить временную папку с файлами zip.DropAllFileToPath(parameters.PathSaveArchive); foreach (FileInfo file in new DirectoryInfo(parameters.PathSaveArchive).GetFiles()) { Loggers.Log4NetLogger.Info(new Exception($"Наименование удаленных файлов: {file.FullName}")); file.Delete(); } Loggers.Log4NetLogger.Info(new Exception("Очистили папку от файлов (OIT)!")); Loggers.Log4NetLogger.Info(new Exception("Перерыв 5 минут (OIT)")); } catch (Exception x) { Loggers.Log4NetLogger.Debug(x); } }
/// <summary> /// Добавление документа /// </summary> /// <param name="mailIn">Принятое письмо с почты</param> public void AddModelMailIn(MailLotusOutlookIn mailIn) { Inventory.MailLotusOutlookIns.Add(mailIn); Inventory.SaveChanges(); Loggers.Log4NetLogger.Info(new Exception("Сохранили письмо с УН " + mailIn.IdMail)); }