将 Outlook 电子邮件的所有附件转换为 PDF

Posted

技术标签:

【中文标题】将 Outlook 电子邮件的所有附件转换为 PDF【英文标题】:Converting all attachments of an Outlook email to PDF 【发布时间】:2011-01-07 12:55:35 【问题描述】:

我正在为 Outlook07 编写一个加载项,它应该存储电子邮件的文本 以及它的所有附件在单独的 pdf 文件中。当然这只是为了合理的附件,对于 zip 文件等没有意义。

我已经到了所有文件都存储在临时目录中的地步(对于每封邮件)。邮件 本身很容易转换,但附件有问题。

这个想法是从每个相应的办公室互操作中使用 exportAs 方法,所以我不必在客户端电脑上安装额外的软件。

要导出每个文件及其对应的办公应用程序,我首先必须找出哪个办公应用程序可以打开它。当然,首先想到的是尝试扩展,但必须有一些更有效的方法

if(fileExt == "doc" or "docx" or "wordformat i forgot") Open Word and Convert
if(fileExt == "xls") Open Excel and Convert

我试图在 msdn 文档和谷歌中找到一些东西,但 Office.Interops 是 真的很糟糕,这使得我已经很难到达现在的位置。并打开 任何地方都没有涵盖上述意义上的文档。

任何暗示都会让我非常高兴。

编辑 - 以下是我如何转换 word 文档的示例:

Word.Application wordApp = new Word.Application();
object oFilename = filename + ".html";
wordApp.Documents.Open(ref oFilename, x,x,x,x,x,x);
wordApp.ActiveDocument.ExportAsFixedFormat(filename+".pdf",
Word.WdExportFormat.wdExportFormatPDF,x,x,x,x,x);
wordApp.ActiveDocument.Close();
wordApp.Close();
wordApp = null;

编辑——成功之路:

var key = registry.ClassesRoot.OpenSubKey(Path.GetExtension(filename));
string openType = key.GetValue("").ToString().ToLower();

if(openType.StartsWith("word.")) return DocumentType.Word;
if(openType.StartsWith("excel.")) return DocumentType.Excel;

return DocumentType.Unusable;

看起来不错。感谢您的帮助,这是周末开始的好方法。

【问题讨论】:

【参考方案1】:

最好的办法是使用注册表找出与扩展相关联的应用程序。如果您查看此链接:

Script to associate an extension to a program

它显示了您需要在注册表中查找的位置。

【讨论】:

你可能误解了我打开Word的意思。我通过 Word.Application wordApp = new Word.Application()“打开”文档;然后是 wordApp.Open(xxxxx); 也许我做到了,当你说“当然,首先想到的是尝试扩展,但必须有一些更有效的方法”时,我假设你想找出什么应用程序打开具有指定扩展名的文件。 好吧,我想一种方法是在扩展和办公应用程序之间建立注册表关系的映射,并使用它来确定我用哪个 interop.app 打开文件。 @TiGoRn,确切地说,这就是我的建议。通过枚举注册表的那个区域,您可以找出哪些应用程序打开了您拥有的附件的扩展。

以上是关于将 Outlook 电子邮件的所有附件转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章

将电子邮件附件移动到 Outlook 中的子文件夹

outlook2016版无法突破邮件附件大小上限

Outlook 将图像显示为在邮件的 HTML 正文中引用的附件

仅保存 Outlook MailItem 的真实附件

从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称

根据主题过滤 Outlook 电子邮件,然后下载附件