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
相关产品推荐
相关产品推荐

