Thunderbird扩展开发:转发邮件图片无法显示报安全错误
解决Thunderbird扩展转发邮件图片显示安全错误问题
问题原因
直接通过setComposeDetails设置邮件body会丢失原始邮件内嵌资源的权限关联:原邮件中的图片引用指向原会话的内部资源,新的撰写窗口无访问权限,从而触发moz-nullprincipal安全错误。手动转发时Thunderbird会自动完成资源复制、CID替换等权限绑定操作,因此图片能正常显示。
解决方案
通过browser.compose.forwardMessage创建转发邮件(让Thunderbird自动处理资源关联),再在已有内容上追加附加信息,而非直接覆盖body:
// 获取选中邮件ID(需确保已有选中邮件的逻辑) const selectedMessages = await browser.messages.getSelected(); const targetMessageId = selectedMessages[0].id; // 创建转发邮件,自动处理内嵌资源绑定 const composeTab = await browser.compose.forwardMessage(targetMessageId, { to: '你的预设邮箱地址' }); // 等待窗口初始化,避免获取不完整的内容 await new Promise(resolve => setTimeout(resolve, 100)); // 获取当前转发邮件的详情 const currentDetails = await browser.compose.getComposeDetails(composeTab.id); // 在原正文后追加附加信息 currentDetails.body += '<div class="extension-append">你的后续处理附加信息</div>'; // 更新邮件内容 await browser.compose.setComposeDetails(composeTab.id, currentDetails);
关键说明
forwardMessage会自动将原邮件的内嵌图片复制到新的撰写会话,并将图片的src替换为cid:格式的引用,确保新窗口有权限访问资源。- 若需自定义正文结构,不要直接使用原邮件的
body内容,而是基于forwardMessage生成的已处理正文进行修改。 - 短延时等待是为了确保Thunderbird完成资源初始化,避免获取到未完成处理的正文。
内容的提问来源于stack exchange,提问作者IndPart
相关产品推荐
相关产品推荐

