【问题标题】:Uploading a file to remote server from background script in Thunderbird从 Thunderbird 中的后台脚本上传文件到远程服务器
【发布时间】:2021-02-08 07:35:33
【问题描述】:

我正在开发一个可以在邮件中上传附件的 Thunderbird 扩展。扩展流程如下:

  1. 单击扩展图标会显示一个弹出窗口,用于选择“阅读全部”、“阅读选定内容”和“阅读未读”选项之一
  2. 当我选择包含附件的电子邮件并选择“读取选定内容”选项时,会触发“读取选定内容”onclick 事件的侦听器。
  3. onclick 监听器向后台脚本发送消息以处理上传

这是我目前的代码:

popup.js

async function readSelected() {
  // this function is invoked by the listener
  const msgList = await browser.mailTabs.getSelectedMessages();
  if(msgList.messages) {
     await browser.runtime.sendMessage({
        caller: 'readSelected',
        messages: msgList.messages
     });
  }
}

background.js

browser.runtime.onMessage.addListener((req, sender, res) => {
  // messages is an Array of MessageHeader objects
  const { caller, accounts, all, messages } = req;
  // ... code for handling other cases
  console.log('Reading selected');
  console.log(messages);
  const ids = [];
  for(const msg of messages) {
      ids.push(msg.id);
  }
  // maps all ids to promises that resolves to MessagePart objects
  Promise.all(ids.map(id => browser.messages.getFull(id)))
    .then(messages => {
        console.log(messages);
    }).catch(e => console.error(e));
});

background.js 的控制台中,我看到每个MessagePart 对象都有一个parts 数组,而该数组又是一个MessagePart 对象数组。我可以看到附件的名称(在我的例子中,所选邮件有一个 DOCX 文件作为附件)。问题是,我如何获取文件?我需要二进制文件数据,因为我需要将其转换为 Base64 字符串,然后才能上传到远程服务器。我查看了以下 SO 帖子:post1post2 但我不确定这是如何工作的,因为这两个帖子都建议使用需要 URI 的 nsIFile 接口。提供的部件没有这样的 URI。

如果需要更多信息,请在评论中询问我,我会更新问题(其余代码主要处理对上述 (1) 中讨论的其他选项的调用)。一些指导方针和帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript thunderbird thunderbird-addon thunderbird-webextensions


    【解决方案1】:

    在撰写本文时,我认为这是不可能的。好吧,您仍然有 messages.getRaw() 在承诺中返回消息的完整来源,包括附件,但您必须再次解析消息,这并非易事。

    我建议关注或评论相关的 Thunderbird 问题。我发现this onethat one 似乎与您的问题有关。

    注意:您链接的其他问题是指较旧类型的插件,而不是基于 WebExtensions API。虽然不建议将这用于现代附加组件(因为旧版组件可能会在任何升级时中断),但可以通过所谓的experiments 访问旧版 API,但我对这些的经验太少,无法告诉你如果他们能帮助你做你想做的事。

    【讨论】:

    • 感谢您的回复。我在大约三周前得出了同样的结论。我无法以任何方式获取附件内容。后来我选择了一个简单的 GUI 应用程序来完成工作。
    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2020-08-31
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多