private static List <EmailParsingData> GetDeliveryReportList(string filter) { try { var mailBoxContent = new List <EmailParsingData>(); Outlook.Items folderItems = null; Outlook.MAPIFolder inboxFolder = null; foreach (dynamic folder in ThisAddIn.thisApplication.GetNamespace("MAPI").Folders) { var subFolders = GpiOutlookWrapper.GetFolder(folder.FolderPath); foreach (Outlook.MAPIFolder subFolder in subFolders.Folders) { if (subFolder.FullFolderPath.Contains("Уведомления о прочтении") && (subFolder.FullFolderPath.Contains("Канцелярия") || subFolder.FullFolderPath.Contains("kancelaria"))) { inboxFolder = subFolder; } } Marshal.ReleaseComObject(subFolders); } if (inboxFolder == null) { return(mailBoxContent); } folderItems = inboxFolder.Items; folderItems.Sort("[CreationTime]", true); var item = folderItems.Find(filter); while (item != null) { var parsingData = new EmailParsingData(); parsingData.Subject = item.Subject; parsingData.ItemClass = item.MessageClass; parsingData.CreationTime = item.CreationTime; mailBoxContent.Add(parsingData); Marshal.ReleaseComObject(item); item = folderItems.FindNext(); } return(mailBoxContent); } catch (Exception ex) { throw; } }
private static EmailStatus GetEmailStatusFromConversation(dynamic item, DateTime creationTime) { var emailStatus = EmailStatus.Unknown; var conversation = (List <ConversationTableData>)GpiOutlookWrapper.GetConversation(item); if (conversation != null) { var conversationList = conversation.Where(c => c.CreationTime > creationTime).OrderBy(c => c.CreationTime).ToList(); if (conversationList.Any()) { foreach (var parentMail in conversationList) { if (parentMail.MessageClass == "IPM.Note") { emailStatus = EmailStatus.Delivery; break; } if (parentMail.MessageClass == "REPORT.IPM.Note.DR") { emailStatus = EmailStatus.Delivery; break; } if (parentMail.MessageClass == "REPORT.IPM.Note.NDR") { emailStatus = EmailStatus.Nodelivery; break; } if (parentMail.MessageClass == "REPORT.IPM.Note.IPNRN") { emailStatus = EmailStatus.Delivery; break; } if (parentMail.MessageClass == "REPORT.IPM.Note.IPNNRN") { emailStatus = EmailStatus.Delivery; break; } } } } return(emailStatus); }
/// <summary> /// The update email status data grid. /// </summary> /// <param name="filterParametersData"></param> private void UpdateMonitorDataGrid(FilterParametersData filterParametersData) { var currentCursor = Cursor.Current; try { this.Cursor = Cursors.WaitCursor; Application.DoEvents(); this.GetFilterParams(); if (this.FolderComboBox.SelectedItem != null) { var inboxFolder = (Outlook.MAPIFolder) this.FolderComboBox.SelectedItem; ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder = inboxFolder; ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder.Display(); this.emailParsingDataList = GpiOutlookWrapper.GetMailBoxContent(inboxFolder, filterParametersData); this.InfoToolStripStatusLabel.Text = $"Обнаружено: {this.emailParsingDataList.Count}"; this.MonitorStatusDataGridView.DataSource = this.emailParsingDataList; if (this.emailParsingDataList.Count > 0) { this.MonitorStatusDataGridView.SelectedRows[0].Selected = true; this.MonitorStatusDataGridViewSelectionChanged(null, null); } } } catch (Exception ex) { this.InfoListBox.Items.Add("UpdateMonitorDataGrid " + ex.Message); this.InfoListBox.Items.Add(ex.StackTrace); foreach (var err in GpiOutlookWrapper.ErrorList) { this.InfoListBox.Items.Add(err); } } finally { this.Cursor = currentCursor; Application.DoEvents(); } }
/// <summary> /// The email status user control_ load. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void EmailStatusUserControlLoad(object sender, EventArgs e) { try { this.NdrDataGridView.AutoGenerateColumns = false; this.webBrowser.Url = new Uri("about:blank"); this.webBrowser.DocumentText = "<html><body>Ожидание...</body></html>"; this.Width = 400; this.FolderComboBox.Items.Clear(); var count = 0; var selectedIndex = 0; foreach (dynamic folder in ThisAddIn.thisApplication.GetNamespace("MAPI").Folders) { var subFolders = GpiOutlookWrapper.GetFolder(folder.FolderPath); foreach (Outlook.MAPIFolder subFolder in subFolders.Folders) { this.FolderComboBox.Items.Add(subFolder); if (subFolder.FullFolderPath.Contains("Канцелярия") && subFolder.FullFolderPath.Contains("Уведомления о прочтении")) { selectedIndex = count; } count++; } Marshal.ReleaseComObject(subFolders); } this.FolderComboBox.SelectedIndex = selectedIndex; this.NdrDataGridView.SelectionChanged += this.EmailStatusDataGridViewSelectionChanged; this.MainToolTip.SetToolTip(this.MaxItemNumericUpDown, @"Максимальное число отображаемых отчетов о недоставке"); this.MainToolTip.SetToolTip(this.UpdateMaxItemButton, @"Установить максимальное число отображаемых отчетов о недоставке"); this.MainToolTip.SetToolTip(this.FolderComboBox, @"Выбор источника для сканирования отчетов о недоставке"); this.MainToolTip.SetToolTip(this.FindParentEmailButton, @"Найти исходное письмо"); this.MainToolTip.SetToolTip(this.NdrDataGridView, @"Отчеты о недоставке (NDR)"); } catch (Exception ex) { this.InfoListBox.Items.Add("EmailStatusUserControlLoad " + ex.Message); } }
/// <summary> /// The update email status data grid. /// </summary> private void UpdateNdrDataGrid() { try { var inboxFolder = (Outlook.MAPIFolder) this.FolderComboBox.SelectedItem; ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder = inboxFolder; ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder.Display(); var fp = FilterParametersData.GetDefault(); this.emailParsingDataList = GpiOutlookWrapper.GetMailBoxContent(inboxFolder, fp, "REPORT.IPM.Note.NDR"); this.InfoToolStripStatusLabel.Text = string.Format("Обнаружено NDR: {0}", this.emailParsingDataList.Count); this.NdrDataGridView.DataSource = this.emailParsingDataList; if (this.emailParsingDataList.Count > 0) { this.NdrDataGridView.SelectedRows[0].Selected = true; this.EmailStatusDataGridViewSelectionChanged(null, null); } } catch (Exception ex) { this.InfoListBox.Items.Add("FolderComboBoxSelectedIndexChanged " + ex.Message); } }
/// <summary> /// The monitro user control load. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void MonitroUserControlLoad(object sender, EventArgs e) { try { this.filterParameters = FilterParametersData.GetDefault(); this.FinishDateTimePicker.Value = this.filterParameters.StartDateTime; this.StartDateTimePicker.Value = this.filterParameters.FinishDateTime; this.SubjectContainTextBox.Text = this.filterParameters.SubjectContain; this.NonDeliveryStatusCheckBox.Checked = this.filterParameters.NonDeliveryStatus; this.UnknownStatusCheckBox.Checked = this.filterParameters.UnknownStatus; this.DeliveryStatusCheckBox.Checked = this.filterParameters.DeliveryStatus; this.MonitorStatusDataGridView.AutoGenerateColumns = false; var dataGridViewColumn = this.MonitorStatusDataGridView.Columns["CreationTimeColumn"]; if (dataGridViewColumn != null) { dataGridViewColumn.DefaultCellStyle.Format = "dd'.'MM'.'yyyy HH:mm:ss"; } this.webBrowser.Url = new Uri("about:blank"); this.webBrowser.DocumentText = "<html><body>Ожидание...</body></html>"; this.Width = 400; this.FolderComboBox.Items.Clear(); var count = 0; var selectedIndex = 0; foreach (dynamic folder in ThisAddIn.thisApplication.GetNamespace("MAPI").Folders) { var subFolders = GpiOutlookWrapper.GetFolder(folder.FolderPath); foreach (Outlook.MAPIFolder subFolder in subFolders.Folders) { this.FolderComboBox.Items.Add(subFolder); //// if (subFolder.FullFolderPath.Contains("*****@*****.**") && subFolder.FullFolderPath.Contains("Отправленные")) if (subFolder.FullFolderPath.Contains("Отправленные") && (subFolder.FullFolderPath.Contains("Канцелярия") || subFolder.FullFolderPath.Contains("kancelaria"))) { selectedIndex = count; } count++; } Marshal.ReleaseComObject(subFolders); } this.FolderComboBox.SelectedIndex = selectedIndex; this.MonitorStatusDataGridView.SelectionChanged += this.MonitorStatusDataGridViewSelectionChanged; this.MainToolTip.SetToolTip(this.FilterButton, @"Показать/скрыть фильтр"); this.MainToolTip.SetToolTip(this.UpdateButton, @"Обновить список писем"); this.MainToolTip.SetToolTip(this.FolderComboBox, @"Выбор источника для сканирования отправленных писем"); this.MainToolTip.SetToolTip(this.StartDateTimePicker, @"Начальная дата"); this.MainToolTip.SetToolTip(this.FinishDateTimePicker, @"Конечная дата"); this.MainToolTip.SetToolTip(this.SubjectContainTextBox, @"Фильтр по теме"); this.MainToolTip.SetToolTip(this.NonDeliveryStatusCheckBox, @"Недоставленный письма"); this.MainToolTip.SetToolTip(this.DeliveryStatusCheckBox, @"Доставленные письма"); this.MainToolTip.SetToolTip(this.UnknownStatusCheckBox, @"Нет информации по письму"); this.MainToolTip.SetToolTip(this.MonitorStatusDataGridView, @"Монитор писем"); } catch (Exception ex) { this.InfoListBox.Items.Add("EmailStatusUserControlLoad " + ex.Message); this.InfoListBox.Items.Add("EmailStatusUserControlLoad " + ex.StackTrace); } }
/// <summary> /// The find parent email button_ click. /// </summary> private void DisplayParentEmail() { try { if (this.NdrDataGridView.SelectedCells.Count == 0) { return; } var row = this.NdrDataGridView.SelectedCells[0].RowIndex; var id = (int)this.NdrDataGridView.Rows[row].Cells["IdColumn"].Value; var entryId = this.emailParsingDataList.First(c => c.Id == id).EntryId; var item = ThisAddIn.thisApplication.GetNamespace("MAPI").GetItemFromID(entryId, Type.Missing); var conversation = (List <ConversationTableData>)GpiOutlookWrapper.GetConversation(item); var paremtMailTableContent = conversation.Where(c => c.CreationTime < item.CreationTime).OrderByDescending(c => c.CreationTime).FirstOrDefault(); if (paremtMailTableContent == null) { MessageBox.Show(@"В письме не обнаружена ссылка на исходное письмо!", @"Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } var parentMail = ThisAddIn.thisApplication.GetNamespace("MAPI").GetItemFromID(paremtMailTableContent.EntryId); var parentMailFolder = parentMail.Parent as Outlook.MAPIFolder; if (parentMailFolder != null) { // // Установили текущую папку ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder = parentMailFolder; ThisAddIn.thisApplication.ActiveExplorer().CurrentFolder.Display(); Application.DoEvents(); Thread.Sleep(500); } if (ThisAddIn.thisApplication.ActiveExplorer().IsItemSelectableInView(parentMail)) { ThisAddIn.thisApplication.ActiveExplorer().ClearSelection(); ThisAddIn.thisApplication.ActiveExplorer().AddToSelection(parentMail); } else { if (MessageBox.Show( @"Невозможно отобразить письмо в текущем режиме. Разверните все свернутые группы используя опцию меню 'Развернуть все группы'. Отобразить письмо в новом окне?", @"Внимание!", MessageBoxButtons.YesNo) == DialogResult.Yes) { parentMail.Display(); } } Marshal.ReleaseComObject(parentMail); if (parentMailFolder != null) { Marshal.ReleaseComObject(parentMailFolder); } } catch (Exception ex) { this.InfoListBox.Items.Add("DisplayParentEmail " + ex.Message); } }