Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C提取Outlook传递失败电子邮件主题和收件人#_C#_Asp.net_Outlook_Window_Ms Office - Fatal编程技术网

C# 使用C提取Outlook传递失败电子邮件主题和收件人#

C# 使用C提取Outlook传递失败电子邮件主题和收件人#,c#,asp.net,outlook,window,ms-office,C#,Asp.net,Outlook,Window,Ms Office,我过去常常通过outlook发送数千封邮件,其中许多是因为许多收件人离开了th组织,而我过去常常收到传递失败的邮件 为了更正我的列表,我想提取主题和收件人以过滤我的主列表 问题是我的.net程序能够获取邮件主题,但无法获取收件人。由于收件人在收件人/抄送/密件抄送列表中不可用,但在邮件正文中不可用,因此我必须阅读邮件正文并随后获取电子邮件id 使用下面的代码,但这不是从邮件正文中读取抄送列表 Microsoft.Office.Interop.Outlook.Application app

我过去常常通过outlook发送数千封邮件,其中许多是因为许多收件人离开了th组织,而我过去常常收到传递失败的邮件

为了更正我的列表,我想提取主题和收件人以过滤我的主列表

问题是我的.net程序能够获取邮件主题,但无法获取收件人。由于收件人在收件人/抄送/密件抄送列表中不可用,但在邮件正文中不可用,因此我必须阅读邮件正文并随后获取电子邮件id

使用下面的代码,但这不是从邮件正文中读取抄送列表

    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());
        }
Microsoft.Office.Interop.Outlook.Application app=null;
Microsoft.Office.Interop.Outlook.\u命名空间ns=null;
Microsoft.Office.Interop.Outlook.ReportItem项=空;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder=null;
Microsoft.Office.Interop.Outlook.MAPIFolder子文件夹=null;
尝试
{
app=新的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];也可以使用
//MessageBox.Show(“文件夹名称:”+子文件夹.Name,子文件夹.EntryID);
//Show(“numitems:+子文件夹.Items.Count.ToString());

对于(int i=1;i我以前使用过以下方法从传递失败电子邮件正文中提取电子邮件地址:

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;
}
private IList findemailaddress(字符串体)
{
IList emailAddresses=新列表;
字符串emailMatch=@“\b([A-Z0-9.\uz0%-]+)@([A-Z0-9.-]+\[A-Z]{2,6})\b”;
Regex mailReg=新的Regex(emailMatch,
RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection matches=mailReg.matches(正文);
for(int index=0;index
几点注意:

使用的正则表达式相当简单,可以捕获格式更简单的电子邮件,但可能会丢失格式更复杂的地址


我通常处理传递失败电子邮件的MailItem对象。我没有使用ReportItem。

我以前使用过以下方法从传递失败电子邮件正文中提取电子邮件地址:

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;
}
private IList findemailaddress(字符串体)
{
IList emailAddresses=新列表;
字符串emailMatch=@“\b([A-Z0-9.\uz0%-]+)@([A-Z0-9.-]+\[A-Z]{2,6})\b”;
Regex mailReg=新的Regex(emailMatch,
RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection matches=mailReg.matches(正文);
for(int index=0;index
几点注意:

使用的正则表达式相当简单,可以捕获格式更简单的电子邮件,但可能会丢失格式更复杂的地址


我通常处理传递失败电子邮件的MailItem对象。我没有使用ReportItem。

我认为您可以设置邮件服务器向您发送失败电子邮件地址列表

我认为您可以设置邮件服务器向您发送失败电子邮件地址列表