如何修改MSGKIT代码使生成的Outlook .MSG文件作为可编辑模板打开
如何修改MSGKIT代码使生成的Outlook .MSG文件作为可编辑模板打开
我之前也碰到过一模一样的问题!MsgKit默认生成的邮件会被Outlook识别为已接收的已读邮件,所以打开是只读查看模式。要让它变成可以直接编辑的模板,只需要调整几个关键属性就行,我帮你把代码修改好了,你可以直接用:
string localPath = _environment.WebRootPath; string EmailGUID = Guid.NewGuid().ToString(); string EmailPath = localPath + "\\files\\email_" + EmailGUID + ".msg"; using (var email = new Email( new Sender("peterpan@neverland.com", "Peter Pan"), // 如果不需要"代表发送"的逻辑,可以去掉Representing参数 // new Representing("tinkerbell@neverland.com", "Tinkerbell"), "Hello Neverland subject")) { email.Recipients.AddTo("captainhook@neverland.com", "Captain Hook"); email.Recipients.AddCc("crocodile@neverland.com", "The evil ticking crocodile"); email.Subject = "This is the subject"; email.BodyText = "Hello Neverland text"; email.BodyHtml = "<html><head></head><body><b>Hello Neverland html</b></body></html>"; email.Importance = MsgKit.Enums.MessageImportance.IMPORTANCE_HIGH; // 关键修改1:设置为未发送草稿状态,这是让Outlook进入编辑模式的核心 email.MessageFlags = MsgKit.Enums.MessageFlags.MSGFLAG_UNSENT; // 关键修改2:设置图标为未发送邮件的图标,符合草稿的视觉提示 email.IconIndex = MessageIconIndex.UnsentMail; email.Save(EmailPath); } var contentType = "Application/vnd.ms-outlook"; var fileStream = new FileStream( EmailPath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.DeleteOnClose); return File(fileStream, contentType, "email.msg");
核心修改点说明:
MessageFlags = MessageFlags.MSGFLAG_UNSENT:这是最关键的一步,它会给.msg文件打上"未发送草稿"的标记,Outlook识别到这个标记后,就会以编辑模式打开文件,而不是只读查看模式。IconIndex = MessageIconIndex.UnsentMail:把邮件图标从已读邮件改成未发送邮件的样式,让用户从视觉上也能直观知道这是可编辑的草稿。- (可选)如果你的业务场景不需要"代表他人发送"的逻辑,可以去掉
Representing参数,因为草稿邮件一般不需要这个设置,去掉后更符合常规新邮件模板的结构。
这样修改后,你生成的.msg文件下载到本地,用Outlook打开时就会和你之前手动上传的模板一样,直接进入编辑界面,收件人、主题、正文都可以随意修改,修改完成后直接点击发送就能正常发出啦!




