c++ - 从.msg文件的 header 流中解析日期

标签 c++ date email winapi msg

我正在尝试获取.msg电子邮件文件的发送日期。经过无休止的搜索,我得出的结论是,发送日期未保留在文件中自己的流中(但是,如果我输入有误,请更正我)。相反,似乎必须从包含标准电子邮件标题的流(名为__substg1.0_007D001F的流)中获取日期。

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

我目前正在尝试使用正则表达式,也许是这样的:

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

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

   //...

}

但是我不愿意使用正则表达式(我担心它会容易出错),并且我想知道是否有更健壮的,可接受的解析 header 的方法。也许在新行上分割标题字符串并找到以Date:开头的字符串?任何指导将不胜感激。

另一个注意事项:我不确定是否可以逐行读取 header 流,因为IStream没有get line方法。

(旁注:我也尝试过使用C++ Outlook自动化获取消息数据,但这似乎涉及一些安全性和兼容性问题,因此无法解决。)

最佳答案

发送日期存储在msg文件中,但请注意,它不在自己的流中。作为简短的固定宽度值,可以在__properties_version1.0流对象的根条目下(或嵌入式消息的附件对象下)找到,其属性ID为0x00390040 the PidTagClientSubmitTime Property,在MS- OXOMSG文档为

Contains the current time, in UTC, when the email message is submitted.



MS-OXCMAIL Section 2.2.3.2.2: Sent time详细说明了这一点:

To set the value of the PidTagClientSubmitTime property ([MS-OXOMSG] section 2.2.3.11), clients MUST set the Date header value, as specified in [RFC2822].



该属性类型为0x0040,pTypTime,根据Property Data Types列表:

8 bytes; a 64-bit integer representing the number of 100-nanosecond intervals since January 1, 1601

关于c++ - 从.msg文件的 header 流中解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049225/

相关文章:

javascript - 如何使用 javascript 生成此格式的电子邮件线索/提示(例如 j*****e@example.com)

c++ - 在C++中将cout从不同来源重定向到同一文件

c++ - 使用 Xcode 嵌入 Lua

R - strtoi 奇怪的行为来获取一年中的一周

python - 如何使用pyspark创建包含大量列和日期数据的数据框?

iphone - 如何以编程方式构建本地化日历月份名称的 NSArray?

php - 检查电子邮件验证和多封电子邮件的简单方法?

c++ - 包括多个动态数组的 c-struct 的分配

c++ - Bullet Physics 最简单的碰撞示例

javascript - 在 123ContactForm 表单中按下 "Send"按钮时发送外部电子邮件