如何从Outlook MSG文件中读取接收日期 - 不包括Outlook API?

スーパ*_*ミコン 6 email outlook metadata

我需要从Outlook msg文件中读取内容.目前我正在使用CodeProject.com项目中的一个类来完成此任务,因为在服务器上部署VSTO和Outlook不是一种选择.

除了日期信息(例如收到日期和发送日期)之外,此类从msg文件获取To,From,CC,Subject,Body和其他所需内容.

关于如何从MSDN上的msg文件中获取东西,有一些(真的,非常低级别)文档,但它有点超出了这个项目的范围,并没有提到日期.

理想情况下,我可以直接替换我现在使用的类(前面提到的CodeProject中的OutlookStorage.cs),或者能够稍微修改现有的类.要修改,我需要正确的4字符十六进制道具标识符用于接收日期.例如,主题列为,PR_SUBJECT = "0037"而正文列为PR_BOY = "1000".

小智 7

如果您正在使用CodeProject中的OutlookStorage.cs,请添加以下内容:

private const string PR_RECEIVED_DATE="007D";
private const string PR_RECEIVED_DATE_2 = "0047";

...

/// <summary>
/// Gets the date the message was received.
/// </summary>
public DateTime ReceivedDate
{
    get
    {
        if (_dateRevieved == DateTime.MinValue)
        {
            string dateMess = this.GetMapiPropertyString(OutlookStorage.PR_RECEIVED_DATE);
            if (String.IsNullOrEmpty(dateMess))
            {
                dateMess = this.GetMapiPropertyString(OutlookStorage.PR_RECEIVED_DATE_2);
            }
            _dateRevieved = ExtractDate(dateMess);
        }
        return _dateRevieved;
        //return ExtractDate(dateMess);
    }
}

private DateTime _dateRevieved = DateTime.MinValue;

private DateTime ExtractDate(string dateMess)
{
    string matchStr = "Date:";

    string[] lines = dateMess.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    foreach (string line in lines)
    {
        if (line.StartsWith(matchStr))
        {
            string dateStr = line.Substring(matchStr.Length);
            DateTime response;
            if (DateTime.TryParse(dateStr, out response))
            {
                return response;
            }
        }
    }
    return DateTime.MinValue;                
}
Run Code Online (Sandbox Code Playgroud)


76m*_*mel 2

我认为Aspose库会做你想做的事,好吧,它是第 3 方库,所以可能不是你想要的。有一些 vbs 脚本可以从可以翻译的 msg 文件中获取基本信息。