Извлечь темы и получатели сообщений об ошибках доставки Outlook с помощью C # - PullRequest
0 голосов
/ 25 февраля 2019

Раньше я отправлял тысячи писем через Outlook, и многие, так как многие получатели покидали организацию, использовали для получения почты с ошибкой доставки.

Чтобы исправить свой список, я хочу извлечь тему и получателя, чтобы отфильтровать моиосновной список.

Проблема заключается в том, что моя программа .net может извлечь тему почты, но не может получить получателя.Поскольку получатель недоступен в списке To / CC / BCC, но в теле письма, мне нужно прочитать тело письма и впоследствии получить идентификатор электронной почты.

Используя приведенный ниже код, однако это не чтение списка CC изтело письма.

    Microsoft.Office.Interop.Outlook.Application app = null;
    Microsoft.Office.Interop.Outlook._NameSpace ns = null;
    Microsoft.Office.Interop.Outlook.ReportItem item = null;
    Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
    Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;


        try
        {
            app = new Microsoft.Office.Interop.Outlook.Application();
            ns = app.GetNamespace("IPM.Note");
            ns.Logon (null, null, false, false);
            inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
            subFolder = inboxFolder.Folders["TestMail"]; //folder.Folders[1]; also works
            //MessageBox.Show("Folder Name: " + subFolder.Name, subFolder.EntryID);
            //MessageBox.Show("Num Items:  " + subFolder.Items.Count.ToString());

            for(int i=1;i<=subFolder.Items.Count;i++)
              {                   
                item = (Microsoft.Office.Interop.Outlook.ReportItem)subFolder.Items[i];                

               //var item = subFolder.Items[i];
                Console.WriteLine("Item: {0}", i.ToString());
                Console.WriteLine("Subject: {0}", item.Subject);
                //Console.WriteLine("Receipient: {0}", item); 
                Console.WriteLine("Categories: {0}", item.Categories);
                Console.WriteLine("Body: {0}", item.Body);
                Console.WriteLine("Body: {0}", item.BillingInformation);
                listBox1.Items.Add(item.Subject);                       

              }
        }
        catch(System.Runtime.InteropServices.COMException ex) 
        {
            Console.WriteLine(ex.ToString());
        }

Субъект появляется что-то в бессмысленном и нечитаемом формате.

Кроме того, item.To/CC/bcc не отображается.

Любойпомощь / предложение, пожалуйста ...

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я думаю, вы можете настроить свой почтовый сервер так, чтобы он отправлял вам список неудачных адресов электронной почты

0 голосов
/ 27 февраля 2019

Ранее я использовал следующий метод для извлечения адресов электронной почты из тела сообщения об ошибке доставки:

private IList<string> FindEmailAddresses(string body)
{
    IList<string> emailAddresses = new List<string>;
    string emailMatch = @"\b([A-Z0-9._%-]+)@([A-Z0-9.-]+\.[A-Z]{2,6})\b";

    Regex mailReg = new Regex(emailMatch,
        RegexOptions.IgnoreCase | RegexOptions.Multiline);
    MatchCollection matches = mailReg.Matches(body);

    for (int index = 0; index < matches.Count; index++)
    {
        emailAddresses.Add(matches[index].ToString());
    }

    return emailAddresses;
}

Пара замечаний:

Используемое регулярное выражение довольно простоеи перехватит более просто отформатированные электронные письма, но может пропустить более сложные отформатированные адреса.

Я обычно имею дело с объектами MailItem писем с ошибками доставки.Я не работал с ReportItem.

...