如何更新本地文件夹中.msg文件的SentOn日期?支持Python/VBA吗?
修改本地.msg文件的SentOn日期方法
可以通过VBA、Python或第三方工具修改.msg文件的SentOn日期,以下是具体实现方式:
VBA实现(依赖Outlook)
.msg是Outlook原生格式,借助Outlook对象模型直接操作最稳定:
- 操作步骤:
- 打开Outlook客户端,按
Alt+F11打开VBA编辑器 - 右键点击项目列表,选择「插入」→「模块」
- 粘贴以下代码并修改路径和目标日期:
- 打开Outlook客户端,按
Sub ModifyMsgSentOnDate() Dim msg As Outlook.MailItem Dim filePath As String Dim newSentOnDate As Date ' 替换为你的.msg文件绝对路径 filePath = "C:\Docs\old_email.msg" ' 设置新的发送日期(格式:#年/月/日 时:分:秒#) newSentOnDate = #2024/05/20 14:45:00# Set msg = Outlook.Application.CreateItemFromTemplate(filePath) ' 修改SentOn属性 msg.SentOn = newSentOnDate ' 覆盖原文件保存,若要保留原文件可修改路径为新地址 msg.SaveAs filePath, olMSG Set msg = Nothing MsgBox "SentOn日期修改完成" End Sub
- 注意:运行前确保Outlook处于打开状态,代码会直接覆盖原文件,建议提前备份。
Python实现(使用pywin32库)
通过pywin32调用Outlook接口,实现和VBA一致的逻辑:
- 操作步骤:
- 安装依赖库:
pip install pywin32 - 编写代码并运行:
- 安装依赖库:
import win32com.client as win32 import datetime def update_msg_sent_on(file_path, new_sent_datetime): outlook = win32.Dispatch("Outlook.Application") # 加载本地.msg文件 mail_item = outlook.CreateItemFromTemplate(file_path) # 赋值新的发送日期 mail_item.SentOn = new_sent_datetime # 3对应olMSG格式,覆盖原文件保存 mail_item.SaveAs(file_path, 3) # 释放资源 del mail_item del outlook if __name__ == "__main__": target_file = r"C:\Docs\old_email.msg" # 设置目标日期时间 new_date = datetime.datetime(2024, 5, 20, 14, 45, 0) update_msg_sent_on(target_file, new_date) print("SentOn日期修改完成")
- 注意:同样依赖Outlook客户端,运行时避免Outlook被其他进程占用。
第三方工具实现(无需代码)
如果不想编写代码,可使用专门的.msg文件编辑工具:
- MsgEdit:轻量级单文件编辑器,打开.msg后直接找到「SentOn」字段修改保存,无需依赖Outlook
- Outlook PST Viewer Pro:支持批量导入.msg文件,批量修改包括SentOn在内的元数据,适合大量文件处理场景
内容的提问来源于stack exchange,提问作者Prashant Mishra
相关产品推荐
相关产品推荐

