写点什么

FastMail 开源多个 JMAP 项目,助力邮件服务器和客户端开发

  • 2015-08-13
  • 本文字数:1247 字

    阅读完需:约 4 分钟

去年 12 月, FastMail 宣布了JMAP 项目,旨在开发一种新协议取代IMAP,用于同步邮件、日历和联系人,并减少数据使用,提高同步效率。 JMAP 提供了一种传输层无关的、基于 JSON 的无状态 API,兼容 IMAP 数据模型,很容易在支持 IMAP 的服务器上实现。

据 FastMail 介绍,JMAP 有许多优点,包括:

  • JMAP 是移动设备友好的:JMAP 可以在一个 HTTP 请求中处理多个命令,并且拥有一种高效的更新机制,减少了无线通信,延长了电池使用时间。
  • JMAP 是服务器友好的:JMAP 是无状态协议,服务器无需像 IMAP 那样维护一个与当前状态不同步的邮箱视图版本。
  • JMAP 是网络友好的:IMAP 可以发送的主动更新数量不受限制,但在 JMAP 中,更新包含限制,如果更新过多,就会返回错误,客户端将需要重新加载视图。
  • JMAP 是多客户端友好的:在 IMAP 中,如果用户重命名一个文件夹或者移动消息,那么做出动作的客户端能够更新其本地缓存,但其它客户端需要重新获取所有数据。而 JMAP 使用唯一 ID 标识消息,没有变化的数据可以一直缓存。

从发布以来,FastMail 就一直不断地修订 JMAP 规范,也有其他公司加入进来与 FastMail 一起构建电子邮件的未来。例如, Atmail 使用JMAP 助力下一代移动应用开发;世界上最流行的开源Webmail Roundcube 的下一个版本也将基于 JMAP 构建。现在,FastMail 已经到了客户端和服务器开发阶段。为此,他们遵循 MIT 协议开源了几个新的 JMAP 项目:

  • JMAP 代理:该代理可以置于任何 IMAP 服务器(最适合于支持 CONDSTORE 的服务器)、CardDAV 和 CalDAV 服务器之前,向它们提供一个基本完整的 JMAP 接口。该代理已相当稳定,可以用于测试新的 JMAP 客户端实现。感兴趣的读者可以试用该代理的托管版本,或者下载源代码
  • JMAP JavaScript 客户端库 JS 客户端库以下一代 FastMail 接口为基础,依赖于 Overture 库的一个子集,是 JMAP 邮箱、日历和联系人模型的一个完整实现。它支持本地异步修改和多级 Undo/Redo,允许网络故障,可以在网络恢复时将修改同步回服务器。
  • JMAP Webmail 演示程序:FastMail 提供了一个基于 JS 客户端库和 JMAP 代理的 Webmail 演示程序,提供了如下功能:通过拖放在文件夹之间移动、即时动作、多级 Undo/Redo、无需分页实现全邮箱访问、对话主题、简单的快捷键和一个简单的日历视图。按照 FastMail 的说法,他们后续不会继续增加更多功能,但欢迎他人创建分支,开发出更成熟的客户端。

除了这些项目外,他们正努力使 JMAP 成为开源 Cyrus IMAP 服务器的一部分。那将是第一个完全适用于生产环境的实现。而在 FastMail 内部,他们已经有一个 Web UI 版本运行在 JMAP 上。如果读者想要实现自己的客户端,那么可以从客户端开发指南入手,并参考 JMAP 规范实现建议。如果想参与JMAP 项目,则可以加入 JMAP 邮件列表


感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-08-13 03:492531
用户头像

发布了 1008 篇内容, 共 443.6 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试自动化“领导者”SmartBear举办首场中国线上研讨会:洞悉全球自动化测试走向,探讨降本增效之策

龙智—DevSecOps解决方案

自动化测试 API测试 UI测试 软件测试自动化

Java中的StringBuilder类

共饮一杯无

Java StringBuilder 11月月更

vivo大数据日志采集Agent设计实践

vivo互联网技术

大数据 数据采集 日志采集 agent

Python 项目工程化最佳实践指南

Andy

Python 项目管理 代码规范 代码风格

企业网络“卫生”实用指南(上)

SEAL安全

网络安全 企业安全

我与梅西粉丝们的世界杯观球日常

ZEGO即构

音视频开发

信息论与编码:恒参信道特性

timerring

11月月更 信息论与编码

公共大数据集群中如何配置 YARN 的公平调度器和容量调度器

明哥的IT随笔

hadoop YARN

一种基于 Apache Hive 的元数据智能发现方案

移动云大数据

hive

Baklib|知识库应用场景:制作员工培训手册

Baklib

团队管理 知识管理

千年荒漠变绿洲,看沙漠“卫士”携手昇腾AI植起绿色希望

华为云开发者联盟

人工智能 华为云 昇腾AI

降本增效的背后,谈谈阿里云存储数据湖3.0

云布道师

数据湖 云存储 云栖大会

String、StringBuffer、StringBuilder 有什么区别

共饮一杯无

Java string 11月月更

DNS中有哪些值得学习的优秀设计

小小怪下士

Java 程序员 DNS

FCOS论文复现:通用物体检测算法

华为云开发者联盟

人工智能 华为云 论文复现

Java中的拆箱与装箱

共饮一杯无

Java 11月月更 装箱与拆箱

FastJSON2他来了,性能显著提升,还能再战十年

共饮一杯无

Java Fastjson 11月月更

技术指南 | 如何集成Perforce版本控制系统Helix Core (P4V) 与敏捷规划工具Hansoft

龙智—DevSecOps解决方案

敏捷 版本管理

面试官:介绍一下 Redis 三种集群模式

程序员小毕

redis 程序员 后端 java面试 redis集群

深入react源码看setState究竟做了什么?

flyzz177

React

重构了一个服务的健康检查组件

Java永远的神

Java 程序员 面试 后端 架构师

互联网大厂必问面试合集,助你跳槽拿高薪--Java篇

钟奕礼

Java java面试 java编程 程序员java

MatrixOne从入门到实践07——MO-Tester

MatrixOrigin

数据库 分布式 测试工具 MatrixOrigin MatrixOne

无情!阿里技术专家手写《微服务架构笔记》,瞬间屠榜NO.1

程序知音

Java 微服务 java架构 后端技术

细说react源码中的合成事件

flyzz177

React

2022中国区Cyber Monday限时优惠来袭,Linux基金会开源软件学园带来优惠

kk-OSC

k8s Linux基金会 CKA CKS

React Context源码是怎么实现的呢

flyzz177

React

探讨Morest在RESTful API测试的行业实践

华为云开发者联盟

开发 API测试 华为云

MySQL数据库 group by 语句怎么优化?

Java全栈架构师

Java MySQL 数据库 程序员 后端

异常的基本概念和Java中的体系

共饮一杯无

Java 异常 11月月更

逻辑回归与评分卡-二元回归与多元回归:重要参数solver & multi_class & class_weight

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

FastMail开源多个JMAP项目,助力邮件服务器和客户端开发_语言 & 开发_谢丽_InfoQ精选文章