You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thunderbird扩展开发:如何获取右键点击的邮件或文件夹对象

实现方案

1. 先调整manifest.json权限配置

首先要在扩展的manifest.json中添加必要权限,才能正常读取邮件、文件夹信息:

{
  "permissions": [
    "menus",
    "messagesRead",
    "accountsRead"
  ],
  // 其余原有配置保持不变
}

2. 修改右键菜单创建逻辑

原来的contexts: ["all"]会让菜单在所有无关位置也显示,改为Thunderbird专属的上下文配置,仅在右键点击邮件/文件夹时显示菜单:

// 替换原有analyse、export菜单的创建代码即可
browser.menus.create({
  id: "analyse",
  type: "radio",
  title: browser.i18n.getMessage("menuItemAnalyse"),
  contexts: ["message", "folder"], // 仅邮件、文件夹右键场景显示
  checked: true,
  icons: {
    "16": "icons/paint-green-16.png",
    "32": "icons/paint-green-32.png"
  }
}, onCreated);

browser.menus.create({
  id: "export",
  type: "radio",
  title: browser.i18n.getMessage("menuItemExport"),
  contexts: ["message", "folder"], // 仅邮件、文件夹右键场景显示
  checked: true,
  icons: {
    "16": "icons/paint-green-16.png",
    "32": "icons/paint-green-32.png"
  }
}, onCreated);

3. 在点击回调中获取右键目标对象

Thunderbird的menus.onClicked回调的第一个参数info会自动携带选中的对象信息:

  • 如果右键点击的是单封/多选邮件,info.selectedMessages会存在,是包含所有选中邮件的MessageList对象
  • 如果右键点击的是文件夹,info.selectedFolder会存在,是对应文件夹的MailFolder对象
    修改后的点击事件代码示例:
browser.menus.onClicked.addListener(async (info, tab) => {
  switch (info.menuItemId) {
    case "log-selection":
      console.log(info.selectionText);
      break;
    case "analyse":
    case "export":
      // 判断右键目标类型
      if (info.selectedMessages) {
        // 处理选中的邮件
        const mails = info.selectedMessages.messages;
        console.log("选中的邮件列表:", mails);
        // 单封邮件直接取mails[0],多选场景遍历数组即可
        // 此处可添加你自己的导出/分析逻辑
      } else if (info.selectedFolder) {
        // 处理选中的文件夹
        const folder = info.selectedFolder;
        console.log("选中的文件夹:", folder);
        // 如果需要获取文件夹内所有邮件,可调用messages.list方法:
        // const allMailsInFolder = await browser.messages.list(folder.id);
        // 此处可添加你自己的导出/分析逻辑
      }
      break;
  }
});

常用属性说明

  • 邮件对象常用属性:id(邮件唯一标识)、subject(主题)、author(发件人)、recipients(收件人)、date(发送时间),如果需要获取完整正文、附件内容,可以调用browser.messages.getFull(messageId)方法
  • 文件夹对象常用属性:id(文件夹唯一标识)、name(文件夹名称)、accountId(所属账户ID)、type(文件夹类型,比如inbox、sent、draft等)

内容的提问来源于stack exchange,提问作者SerFer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:54:03