Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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++ 解析.msg文件头流中的日期_C++_Date_Email_Winapi_Msg - Fatal编程技术网

C++ 解析.msg文件头流中的日期

C++ 解析.msg文件头流中的日期,c++,date,email,winapi,msg,C++,Date,Email,Winapi,Msg,我正在尝试获取.msg电子邮件文件的发送日期。经过无休止的搜索,我得出结论,发送日期并没有保存在文件中自己的流中(但如果我错了,请纠正我)。相反,似乎必须从包含标准电子邮件头的流(名为\uu subsg1.0\u 007D001F的流)中获取日期 因此,我设法获得了电子邮件头流并将其存储在缓冲区中。此时,我需要从标题中查找并解析Date字段。我发现这很困难,因为我不相信我可以使用一个标准的电子邮件解析C++库。毕竟,我只有一个标题流——而不是一个完整的标准电子邮件文件 我目前正在尝试一个正则表达

我正在尝试获取
.msg
电子邮件文件的发送日期。经过无休止的搜索,我得出结论,发送日期并没有保存在文件中自己的流中(但如果我错了,请纠正我)。相反,似乎必须从包含标准电子邮件头的流(名为
\uu subsg1.0\u 007D001F
的流)中获取日期

因此,我设法获得了电子邮件头流并将其存储在缓冲区中。此时,我需要从标题中查找并解析
Date
字段。我发现这很困难,因为我不相信我可以使用一个标准的电子邮件解析C++库。毕竟,我只有一个标题流——而不是一个完整的标准电子邮件文件

我目前正在尝试一个正则表达式,可能是这样的:

std::wregex regexDate(L"^Date:(.*)\r\n");
std::wsmatch match;

if (std::regex_search(strHeader, match, regexDate)) {

   //...

}
但我不愿意使用正则表达式(我担心它会容易出错),我想知道是否有一种更健壮、更为公认的方法来解析头文件。也许在新行上拆分标题字符串并查找以
Date:
开头的字符串?任何指导都将不胜感激

另一个考虑因素:我不确定是否可以逐行读取标题流,因为
IStream
没有get-line方法


(边注:我也曾尝试用C++ Outlook自动化获取消息数据,但这似乎涉及到一些安全性和兼容性问题,所以它不会解决)。< /P> < P>发送日期存储在MSG文件中,但正如您所注意的,它不是在自己的流中。作为一个短的固定宽度值,它可以在根条目下的_properties_version1.0流对象中找到(或在嵌入消息的附件对象下),属性ID为0x00390040,在MS-OXOMSG文档中描述为

包含提交电子邮件时的当前时间(UTC)

详细阐述这一点:

要设置PidTagClientSubmitTime属性的值([MS-OXOMSG]第2.2.3.11节),客户端必须按照[RFC2822]中的规定设置日期标头值

其属性类型为0x0040,pTypTime,根据以下列表:

8字节;表示自1601年1月1日起100纳秒间隔数的64位整数


发送日期存储在msg文件中,但正如您所注意到的,它不在自己的流中。作为一个短的固定宽度值,它可以在根条目下的_properties_version1.0流对象中找到(或在嵌入消息的附件对象下),属性ID为0x00390040,在MS-OXOMSG文档中描述为

包含提交电子邮件时的当前时间(UTC)

详细阐述这一点:

要设置PidTagClientSubmitTime属性的值([MS-OXOMSG]第2.2.3.11节),客户端必须按照[RFC2822]中的规定设置日期标头值

其属性类型为0x0040,pTypTime,根据以下列表:

8字节;表示自1601年1月1日起100纳秒间隔数的64位整数


为什么不使用正则表达式呢?现在您可以获得整个报头流的字符串信息,我相信您可以通过精确匹配字符串来工作。也许您可以通过匹配多个字符串来提供准确性。为什么不使用正则表达式呢?现在您可以获得整个报头流的字符串信息,我相信您可以通过精确匹配字符串来工作。也许您可以通过匹配多个字符串来提供准确性。