在介绍了 Instapaper 的协议支持后,今天我们将聚焦于邮件安全领域,介绍如何通过 Protocol LauncheriPGMail 联动,实现 OpenPGP 加密邮件的无缝处理。

作为注重隐私安全的开发者或企业用户,你可能经常遇到这些场景:

  • 在 Web 应用中提供一个"加密发送"按钮,让用户安全地传输敏感信息。
  • 在内部系统中集成 PGP 加解密功能,无需用户手动切换到加密工具。
  • 引导用户快速撰写加密邮件或验证签名消息。

现在,通过 Protocol Launcher,你可以以类型安全的方式调用 iPGMail 的加密能力,让邮件安全变得更加简单。


iPGMail 与深度链接

iPGMail 是一款适用于 iOS 和 macOS 的专业 OpenPGP 加密工具,为邮件通信提供端到端加密保护。

iPGMail 支持通过 x-ipgmail:// 协议 URL 从外部应用触发加密、解密、签名和撰写邮件等操作。然而,手动拼接这些链接需要处理复杂的参数编码规则,且缺乏类型提示,容易出错。


核心能力:四大加密操作

Protocol Launcher 为 iPGMail 专门提供了 protocol-launcher/ipgmail 模块,支持以下核心功能:

  1. 撰写加密邮件 (compose):直接在 iPGMail 中打开撰写界面,预填充邮件内容。
  2. 解密 PGP 消息 (decrypt):解密剪贴板或指定的 PGP 加密消息。
  3. 加密文本 (encrypt):使用公钥或对称加密方式加密纯文本。
  4. 数字签名 (sign):对文本进行数字签名,确保消息的真实性和完整性。

快速上手

首先,确保你的项目中已安装:

npm install protocol-launcher

在代码中你可以根据场景选择两种导入方式:

  • 按需加载(通过子路径导入),支持 Tree Shaking,体积更小;
  • 全量导入(从根包导入),写法更简单,但会引入所有已支持应用的逻辑。
// ✅ 推荐:按需加载 iPGMail 模块
import { compose, decrypt, encrypt, sign } from 'protocol-launcher/ipgmail'

// 也可以从根包导入,但会包含所有应用模块
// import { ipgmail } from 'protocol-launcher'

场景一:撰写加密邮件 (compose)

这是最直接的功能。你可以引导用户直接在 iPGMail 中撰写新的加密邮件:

import { compose } from 'protocol-launcher/ipgmail'

const url = compose({
  text: '这是一封测试邮件...',
})

提示: text 参数会被自动进行 URL 编码,确保特殊字符正确传递。

场景二:解密 PGP 消息 (decrypt)

如果你想让用户快速解密剪贴板中的 PGP 加密消息:

import { decrypt } from 'protocol-launcher/ipgmail'

const url = decrypt({
  pgpmsg: 'clipboard', // 从剪贴板读取加密消息
  result: 'clipboard', // 解密结果复制回剪贴板
})

你也可以直接传入完整的 PGP 消息:

const url = decrypt({
  pgpmsg: '-----BEGIN PGP MESSAGE-----\n...\n-----END PGP MESSAGE-----',
})

场景三:加密文本 (encrypt)

加密功能支持多种配置选项,包括公钥加密和对称加密:

import { encrypt } from 'protocol-launcher/ipgmail'

// 使用公钥加密剪贴板内容
const url = encrypt({
  datasource: 'clipboard',
  keyid: '47E3234C', // 8 位公钥 ID
  result: 'clipboard', // 加密结果复制到剪贴板
})
// 直接加密指定文本
const url = encrypt({
  text: '这是需要加密的敏感信息...',
})
// 使用对称加密(密码加密)
const url = encrypt({
  text: '这是需要加密的内容...',
  symmetric: true,
  passwd: 'your-password',
  result: 'clipboard',
})
// 加密结果保存到文件
const url = encrypt({
  datasource: 'clipboard',
  keyid: '47E3234C',
  result: 'encrypted.pgp', // 保存为文件
})

场景四:数字签名 (sign)

对文本进行数字签名,确保消息来源的可信性:

import { sign } from 'protocol-launcher/ipgmail'

// 使用私钥签名剪贴板内容
const url = sign({
  datasource: 'clipboard',
  signkey: '47E3234C', // 8 位私钥 ID
  result: 'clipboard', // 签名结果复制到剪贴板
})
// 直接签名指定文本
const url = sign({
  text: '这是需要签名的内容...',
})
// 签名结果保存到文件
const url = sign({
  datasource: 'clipboard',
  signkey: '47E3234C',
  result: 'signature.sig',
})

参数详解

compose 参数

参数 类型 必填 说明
text string 要写入撰写界面的文本内容,会自动进行 URL 编码

decrypt 参数

参数 类型 必填 说明
pgpmsg string PGP 加密消息,可使用 clipboard 关键字从剪贴板读取
result 'clipboard' 解密结果是否复制回剪贴板

encrypt 参数

参数 类型 必填 说明
datasource 'clipboard' 数据源,目前仅支持 clipboard
text string 要加密的明文文本
keyid string 8 位公钥 ID,用于加密数据
signkey string 8 位私钥 ID,用于签名数据
result 'clipboard' | string 结果输出位置:剪贴板或文件名
symmetric boolean 是否使用对称加密(密码加密)
passwd string 对称加密时使用的密码

sign 参数

参数 类型 必填 说明
datasource 'clipboard' 数据源,目前仅支持 clipboard
text string 要签名的明文文本
signkey string 8 位私钥 ID,用于签名
result 'clipboard' | string 结果输出位置:剪贴板或文件名

为什么选择 Protocol Launcher?

  1. 自动编码与参数处理:iPGMail 的协议对参数编码有严格要求。库内部会自动处理所有的 URL 转义逻辑,确保生成的 URL 在唤起应用时绝不乱码

  2. 类型安全与智能提示:TypeScript 类型定义确保你提供了正确的参数组合,IDE 智能补全会提醒你每个参数的含义和格式要求。

  3. 一致的用户体验:通过封装复杂的协议逻辑,你可以专注于业务功能的实现,而不用担心不同操作系统下协议触发的细微差异。

  4. 极致的按需加载 (Tree Shaking):采用模块化设计,支持按需加载以最小化包体积:

    • 推荐方式:使用子路径导入(如 import { encrypt } from 'protocol-launcher/ipgmail'),这样构建工具只会打包相关的代码。
    • 全量方式:也可以从根包导入(如 import { ipgmail } from 'protocol-launcher'),建议生产环境始终使用按需加载。
  5. 完整的 OpenPGP 工作流支持:覆盖撰写、加密、解密、签名四大核心场景,满足邮件安全通信的全部需求。


结语

通过 Protocol Launcher,你可以将专业的 OpenPGP 加密能力无缝集成到你的应用中。无论是在企业内部的敏感信息传输系统,还是面向隐私保护的个人工具,它都是连接 Web 应用与本地加密客户端最优雅的桥梁。


🔗 相关链接

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐