【问题标题】:How can I get attachment content from an Outlook mail in a Node.js Outlook add-in?如何从 Node.js Outlook 加载项中的 Outlook 邮件中获取附件内容?
【发布时间】:2020-03-10 15:41:31
【问题描述】:

首先,作为一名学生,我缺乏一些经验来理解我所尝试的一切以及我所尝试的一切。但是,我觉得我已经尝试了网上几乎所有可用的解决方案。

我正在为我的公司开发一个基于 Yeoman 的 Outlook 插件(带有 Node.js 的完整 javascript),我需要从邮件中获取附件,而不仅仅是大小等信息,文件类型或附件名称,如果可能,我需要 base64 格式的完整内容(以便生成包含邮件正文和附件的 .eml 文件)。

我找到了多种方法,但问题是它们都不起作用:

  • 首先我尝试了凌乱的微软文档,我发现的第一个解决方案是这个:https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/get-attachments-of-an-outlook-item,问题是这个解决方案我需要使用c#,但是我的加载项是完整的js,我需要找到一个适用于 JS 和 Node.js 的解决方案
  • 然后我寻找一种解决方案,允许我与 Exchange Server 以某种方式进行通信以获取附件内容,我发现:https://github.com/gautamsi/ews-javascript-api,但这不适用于面向浏览器的加载项(和我需要我的加载项在客户端和浏览器上工作),所以我利用了这个:https://github.com/gautamsi/ews-js-api-browser。我在第一个链接和这里找到了一些代码示例:Save outlook Email attachment using ews-javascript-api npm in node JS 这帮助我构建了一些应该可以工作的东西(在第三个链接的示例代码上使用第二个链接的示例语法),但到了我正在尝试的地步为了从邮件中获取附件,我从附件中获取了很多信息,但是与它的内容相关的任何内容都是空的,下一步我“加载”文件从“服务”返回错误 500文档为空”,我仍然不知道为什么。
  • 最后,我试图退后一步,在 google 上查找 office api 以及如何获取附件内容,我找到了这个链接:https://blog.mastykarz.nl/office-365-unified-api-mail/ 几乎看起来不错,我是对的:根据 microsoft doc,我需要一个令牌才能使 office 365 api url 工作,这是 Azure AD 在管理员授权您获取它时提供的令牌(或者我认为,这是 microsoft doc 所在的部分更混乱)。问题是,在 Azure AD 上连接时,我在网站上的屏幕上显示一个错误(绝对没有关于该错误的详细信息),并且我需要访问某些地方才能获得我的令牌无法正常工作,显示另一个错误没有任何细节的消息,或者只是从不加载。

我已经尽可能减少了我的问题的大小,不想让你淹没在信息、示例代码、链接和图片中,所以如果它看起来太长而且细节太差,很抱歉。

感谢您抽出宝贵时间,随时提出您想到的任何解决方案、建议或意见!

【问题讨论】:

    标签: javascript node.js outlook outlook-addin email-attachments


    【解决方案1】:

    做同样的事情,我找到了解决方案:

    • 在客户端获取exchangeToken (Office.context.mailbox.getCallbackTokenAsync())
    • 将令牌、附件 ID、电子邮件 ID 发送到服务器(在我的情况下是 C#,在你的情况下是 nodejs)
    • 使用 EWS 托管 API 2.0 或在您的情况下使用 ews-javascript-api 来处理加载电子邮件 mimecontent(包含电子邮件 + 附件)或附件 mimecontent。
    • 将文件上传到另一个服务或对它做任何你想做的事情。

    在我切换到服务器端的 C# 之前,我使用的是 nodejs 进行测试,所以如果您有任何问题,请随时提问。

    【讨论】:

    • 感谢您的回答。我正确地获取了令牌,但是现在正如您所说,我需要将令牌和数据都发送到我的 nodejs 服务器,我猜想将它们放在其他地方。为此,我安装了 ews-javascript-api,但是当我 require 它时,我的编译器告诉我 dnsnet 都无法在 'node_modules\fetch\lib' 中解析,所以我安装了他们,现在我遇到了与dgram 相同的问题,但安装它并没有改变任何事情此外,我不知道如何处理我的令牌,使用 ews-javascript-api。我在哪里需要它?
    • fetch 库仅在浏览器中可用。 ews-javascript-api 仅在 nodejs 服务器的上下文中有效,对于客户端(浏览器),您必须使用 ews-js-api-browser。这有帮助吗?
    • 这是我发现我缺乏经验的地方......所以,如果我做对了,我需要在我的客户端中使用 ews-js-api-browser 从 Exchange 获取附件,但我不是需要向我的本地 nodejs 服务器(或为此目的构建的另一个服务器?)发送包含我的令牌的请求,以便在服务器端管理我自己的请求,与 Exchange 通信并将附件返回给我的客户端?这两种解决方案有区别吗?也许我只是不明白一个人是如何工作的
    • 您可以使用ews-js-api-browser 完成所有客户端操作,在这种情况下您不需要节点服务器,但我发现内存不足错误,因为我的 windows/outlook 组合使用的是旧的作为客户端的 IE11 版本在处理大型 xml 响应时存在错误。
    • 或者您可以在客户端使用 Office.js 获取令牌和 ID,将它们发送到使用 ews-javascript-api 将请求发送到交换服务器的服务器。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 2017-04-26
    • 2011-01-14
    • 2012-06-06
    • 2019-07-08
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多