【问题标题】:Outlook new email to Excel rowOutlook 新电子邮件到 Excel 行
【发布时间】:2017-03-14 11:50:54
【问题描述】:

我想创建一个 C# 控制台应用程序(或服务 - 尚不确定如何开发服务):

1) 知道收件箱>LOTALogs 文件夹何时收到新电子邮件。此电子邮件由移动应用程序发送,包含附件和客户遇到的一些问题。

2) 获取以逗号分隔的新电子邮件内容,解析内容并将其附加到已设置列的 Excel 工作表中。

我设法创造了:

1) 解析器:

    public static string[] emailContentsArray()
    {
        string content = "Username = Customer1,User ID = 362592,Unit ID = 805618,Date = Mar 12, 2017,Device = Android LGE LG-H990,OS version = 7.0 (API 24),App version = 1.0.0.56,Description = some description,Message = some message";
        string[] contentArray = content.Split(',');

        // Case where date format includes another comma
        if (contentArray.Length > 10)
        {
            // Parsing headers
            contentArray[0] = contentArray[0].Substring(11);
            contentArray[1] = contentArray[1].Substring(10);
            contentArray[2] = contentArray[2].Substring(10);
            contentArray[3] = contentArray[3].Substring(7) + ", " + contentArray[4].Substring(1);
            contentArray[4] = contentArray[5].Substring(9);
            contentArray[5] = contentArray[6].Substring(13);
            contentArray[6] = contentArray[7].Substring(14);
            contentArray[7] = contentArray[8].Substring(14);
            contentArray[8] = contentArray[9].Substring(10);
            contentArray[9] = null;

            for (int i = 0; i < contentArray.Length; i++)
            {
                Console.Write(contentArray[i] + ",");
            }
        }
        //else
        //{

        //}
        return contentArray;
    }

2) 访问文件夹并统计项目数:

    public static string[] emailContent()
    {
        string[] content = null;
        Microsoft.Office.Interop.Outlook.Application app = null;
        Microsoft.Office.Interop.Outlook.NameSpace ns = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder logFolder = null;

        app = new Microsoft.Office.Interop.Outlook.Application();
        ns = app.GetNamespace("MAPI");
        inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
        logFolder = app.ActiveExplorer().CurrentFolder = inboxFolder.Folders["LOTALogs"];
        int itemCount = logFolder.Items.Count;

        Console.WriteLine("\n\nFolder Name: {0}, Num Items: {1}\n", logFolder.Name, itemCount);

        return content;
    }

3) 打开并打印电子表格的内容:

        Excel.Application xlApp = new Excel.Application();
        string path = "C:\\SomeUser\\BugReports";
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@path);
        Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1];
        Excel.Range xlRange = xlWorksheet.UsedRange;

        for (int i = 1; i <= xlRange.Row + xlRange.Rows.Count - 1; i++)
        {
            for (int j = 1; j <= xlRange.Column + xlRange.Columns.Count - 1; j++)
            {
                if (j == 1)
                    Console.Write("\r\n");

                if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
                    Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");
            }
        }
        xlWorkbook.Save();
        xlWorkbook.Close();
        xlApp.Quit();

        Console.ReadLine();

我现在有点失落:)

我还需要:

1) 创建一个事件监听器(我想这就是它的名字),这样我就可以告诉电子邮件正文解析器去获取电子邮件内容。

2) 从邮件中提取邮件正文。

得到这个使用

 Console.WriteLine(logFolder.Items[1].Body);

3) 获取电子邮件内容并将其附加到电子表格中。

4) 我应该将其创建为 Windows 服务吗?

PS - 我不是开发人员,只是摆弄代码并尽可能提高效率。当有技术解决方案时,我不想手动填写此电子表格。如果您对提高代码效率和以不同方式建模有任何建议,请发表评论。

【问题讨论】:

    标签: c# excel email outlook


    【解决方案1】:

    对我来说看起来很可靠。我会避免使用该服务,但这在很大程度上取决于您的用户。除非您的客户真的想对整个过程“视而不见”,否则会增加很多不必要的复杂性。

    至于附加到电子表格...

    int lastRow = xlWorksheet.UsedRange.Rows;
    Excel.Range xlRange = xlWorksheet.Cells[lastRow + 1, 1];
    xlRange.Value = stuffFromInbox;
    

    如果您只将一项添加到电子表格中,这将正常工作。对于电子表格的大规模读/写操作(例如您的“打开并打印电子表格的内容”),将整个RangeValueValue2 读入@987654325 会更有效@。然后遍历本地数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      相关资源
      最近更新 更多