`
chloerei
  • 浏览: 9454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

邮件列表应用不能支持 QQ 邮箱的原因

阅读更多
最近公司正在研发的一个邮件列表服务,因为需要将同一个话题的前后邮件串成线索,所以去了解了一些邮件头定义,以及如何识别邮件对话上下文的方法。

标准的邮件头里面定义了一个 In-Reply-To 字段,这个字段在 rfc822 中是这么解释的:
引用
4.6.2. IN-REPLY-TO

The contents of this field identify previous correspondence which this message answers.


这个头很容易理解,它存放了当前邮件回复的邮件ID,比如用 gmail 回复邮件,邮件头里面会包含以下字段:
引用
Message-ID: <CAEyJnUq2=7B_RRfe1=1iNVGh_Tqc5n=NJzrBzAJ8BEE9VnkE0Q@mail.gmail.com>
In-Reply-To: <tencent_1118E66B5C5AE62D25831465@qq.com>


这样,各类邮件列表或者邮件客户端就可以识别这封邮件是回复了 <tencent_1118E66B5C5AE62D25831465@qq.com> 这封邮件的,而如果要回复这封gmail邮件,就应该把 Gmail 邮件的 Message-ID 放到 In-Reply-To。

于是公司的邮件列表服务就基于邮件的 In-Reply-To 信息做了一个 web 界面,邮件的收发在后台被串成一个个 Topic。测试过程中大部分邮箱(163,gmail,msn……)都能正常处理,却发现 QQ 邮箱每回一个邮件都新建了一个主题,似乎是没有正确识别它的上下文。于是用 QQ 回复一封邮件,打开原文查看邮件头(隐去我的email地址):
引用
Delivered-To: chloe***@gmail.com
Received: by 10.182.28.233 with SMTP id e9cs131752obh;
        Mon, 21 Nov 2011 19:18:14 -0800 (PST)
Received: by 10.231.8.143 with SMTP id h15mr3969665ibh.94.1321931893044;
        Mon, 21 Nov 2011 19:18:13 -0800 (PST)
Return-Path: <chloe***@qq.com>
Received: from smtpbg52.qq.com (smtpbg52.qq.com. [64.71.138.43])
        by mx.google.com with SMTP id m10si3572370icu.21.2011.11.21.19.18.12;
        Mon, 21 Nov 2011 19:18:13 -0800 (PST)
Received-SPF: pass (google.com: domain of chloerei@qq.com designates 64.71.138.43 as permitted sender) client-ip=64.71.138.43;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of chloerei@qq.com designates 64.71.138.43 as permitted sender) smtp.mail=chloe***@qq.com; dkim=neutral (no signature) header.i=@qq.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s0907;
t=1321931892; bh=AXXnKE4F5rR44xTUgYD2wpsmGbJ6mYVlVOK31SUjW3w=;
h=X-QQ-SSF:X-QQ-BUSINESS-ORIGIN:X-Originating-IP:X-QQ-STYLE:
X-QQ-mid:From:To:Subject:Mime-Version:Content-Type:
Content-Transfer-Encoding:Date:X-Priority:Message-ID:X-QQ-MIME:
X-Mailer:X-QQ-Mailer:X-QQ-ReplyHash;
b=aZ400d+i6ptIpZhMY6kLfgYh4QiS80cgiYeQgU4fxEZQYa8zUjytvkEd2kyJ/AJrW
lKQvyGam0JId/Ql1frfurdIjNDmcLh38a8dJJYvsGEkc6AcaAc3Ji6xethKolD7
X-QQ-SSF: 00010000000000F0000000000000000
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 211.103.191.134
X-QQ-STYLE:
X-QQ-mid: webmail504t1321931889t662760
From: "=?gbk?B?Y2hsb2VyZWk=?=" <chloe***@qq.com>
To: "=?gbk?B?Y2hsb2VyZWk=?=" <chloe***@gmail.com>
Subject: =?gbk?B?u9i4tKO6suLK1LuwzOI=?=
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_4ECB1471_DCF2B518_079AED38"
Content-Transfer-Encoding: 8Bit
Date: Tue, 22 Nov 2011 11:18:09 +0800
X-Priority: 3
Message-ID: <tencent_1118E66B5C5AE62D25831465@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 971243411


可以看到,长长的邮件头里面竟然就没有 In-Reply-To 字段。那么,丢了 In-Reply-To 字段,QQ 邮箱的会话功能又是怎么做到的呢?

看到最后一个字段,忽然明白了。
引用
X-QQ-ReplyHash: 971243411


这是只有腾讯自己才能识别的邮件头。

想不明白腾讯抛弃现有的标准邮件头不用,自建邮件头是为什么,这样的结果是除了少数像 Gmail 这样智能根据邮件全文判断上下文的邮件服务能正常识别线索外,其余为标准邮件协议而写的客户端都不能处理了。最终公司的邮件列表服务暂时放弃了支持非标准的 QQ 邮件。
分享到:
评论

相关推荐

    VC++通过QQ邮箱发送邮件例子

    在VC++环境中,通过QQ邮箱发送邮件涉及到的主要知识点包括SMTP(Simple Mail Transfer Protocol)协议、MIME(Multipurpose Internet Mail Extensions)编码以及QQ邮箱的SMTP服务器设置。下面将详细讲解这些概念及其...

    C#使用Pop3接收邮件(可接收163,QQ邮箱等)

    这可能是由于安全或性能考虑,因此,如果你需要获取历史邮件,可能需要考虑使用IMAP协议或者API接口,如QQ邮箱的SMTP/POP3/IMAP API。 在实际项目中,你还需要考虑错误处理和异常捕获,确保在出现问题时能够优雅地...

    设置小米内置电子邮件-登录QQ邮箱

    完成以上步骤后,你的QQ邮箱就已经成功地配置在小米手机的电子邮件应用中,你可以开始实时接收和发送邮件,享受如同接收短信般的便捷体验。记住,了解并掌握邮件服务的基本设置知识,对于管理和使用不同的邮箱服务至...

    发送邮件工具类,支持QQ邮箱

    这个名为“发送邮件工具类,支持QQ邮箱”的程序库或代码模块专门设计用于帮助开发者便捷地通过QQ邮箱发送带有附件的邮件。QQ邮箱是腾讯公司提供的免费电子邮箱服务,具有稳定性强、功能丰富的特点,深受用户喜爱。...

    PHP使用imap读取邮件内容-2018年QQ邮箱可用

    在IT领域,特别是Web开发中,PHP是一种广泛使用的服务器端脚本语言,...这在自动化处理邮件、监控特定邮件、或构建邮件应用时非常有用。在实际开发中,应确保遵循最佳实践,包括正确处理异常、保护用户凭据和优化性能。

    java实现发送邮件仅支持QQ邮箱

    JavaMail是Java编程语言中...总之,JavaMail是Java开发者实现邮件功能的强大工具,通过理解并应用上述知识点,你可以轻松地实现在Java应用中发送QQ邮箱邮件的功能。记得在实际开发中根据具体需求进行相应的调整和优化。

    QQ邮箱发送邮件的例子

    - **POP3/IMAP协议**:尽管描述主要集中在发送邮件,但QQ邮箱也支持POP3和IMAP协议来接收邮件。POP3允许用户下载邮件到本地设备,而IMAP则保持邮件在服务器上,让用户在多设备间同步查看邮件。 - **Web应用开发**:...

    QQ邮箱批量开通助手.zip

    5. **应用场景**:QQ邮箱批量开通助手主要适用于以下场景: - **市场营销**:企业或个人可以利用这些邮箱地址进行邮件营销,推广产品或服务,但需遵循相关的邮件发送规定,避免被视为垃圾邮件。 - **社群管理**:...

    QQ邮件列表

    QQ邮件列表是电子邮件营销的一种工具,特别是在中国,QQ邮箱作为广泛使用的电子邮箱服务之一,它的邮件列表功能在商业推广和信息传播中具有重要地位。"东方不败QQ邮件列表订户收集大师"是一款专为此目的设计的软件,...

    QQ邮箱POP3、SMTP配置使用说明

    QQ邮箱的POP3和SMTP配置是用于在第三方邮件客户端或者应用程序中接收和发送邮件的关键步骤。POP3(Post Office Protocol version 3)协议主要用于下载邮件,而SMTP(Simple Mail Transfer Protocol)则用于发送邮件...

    邮箱 email 支持 qq邮箱 ssl tls 国外大神的作品

    标题中的“邮箱 email 支持 qq邮箱 ssl tls 国外大神的作品”表明这是一个关于电子邮件系统,特别是关于QQ邮箱的SSL和TLS加密技术的应用。国外开发者创建了一个可能的C++库或工具,允许用户通过SSL和TLS协议与QQ邮箱...

    php使用QQ邮箱发送邮件

    在PHP编程中,使用QQ邮箱发送邮件是一种常见的需求,尤其对于个人网站或小型项目来说,因为QQ邮箱提供了免费且易于配置的SMTP服务。本篇文章将详细介绍如何在PHP中利用QQ邮箱进行邮件发送,并涵盖相关知识点。 首先...

    Android仿QQ邮箱客户端源码_QQ_android_

    在Android平台上,开发一款仿QQ邮箱的客户端是一项挑战...通过学习和分析这个项目,开发者不仅可以掌握Android应用的基础开发,还能深入理解如何与第三方服务(如QQ邮箱)进行集成,对提高Android开发技能有很大帮助。

    Java QQ邮箱发送邮件

    需要注意的是,QQ邮箱可能需要开启“第三方应用的授权码”,而163邮箱则需要开启“不安全的客户端登录”。同时,确保你的网络环境允许SMTP连接,否则可能会发送失败。在实际开发中,还需要处理异常,以及考虑重试、...

    c++ 使用SMTP 发送 QQ邮件。

    在实际应用中,确保遵循QQ邮箱的使用政策。 为了在Windows环境下,如Win7和VS2010中运行,你需要确保库文件(如lib和dll)正确配置,并且编译器支持库所依赖的C++标准。VS2010支持C++11标准,但部分现代库可能需要...

    Android实现qq邮箱发送DemoMail.zip

    综上所述,"Android实现qq邮箱发送DemoMail.zip"项目涵盖了Android应用开发中邮件发送的关键知识点,包括SMTP服务集成、JavaMail API使用、SSL/TLS安全、异常处理以及异步操作等。通过这个项目,开发者可以学习并...

    qq邮箱的JS在线编辑器

    QQ邮箱的JS在线编辑器是一种基于JavaScript技术构建的富文本编辑工具,主要用于用户在Web页面上撰写和格式化电子邮件内容。这种编辑器提供了类似于桌面应用的编辑体验,让用户可以轻松添加文字、图片、链接等元素,...

    Java通过QQ邮箱发邮件.rar

    这通常可以在QQ邮箱的设置中找到,你需要开启SMTP服务以允许外部应用程序发送邮件。 接下来,你需要引入JavaMail API,这是一个用于处理邮件的Java库。你可以通过Maven或Gradle将其添加为项目依赖。对于Maven,可以...

    易语言源码取QQ好友列表并群发邮件.rar

    然后,它会使用SMTP协议连接到邮件服务器,将邮件内容和收件人列表(即QQ好友的邮箱地址)发送出去。为了成功运行,开发者需要正确配置QQ的接口授权信息以及邮件服务器的登录凭证。 学习这个项目,开发者不仅可以...

    Android应用源码之仿QQ邮箱安卓客户端项目.zip

    本资源提供了一个仿QQ邮箱安卓客户端的完整源码,对于想要深入学习Android应用开发,特别是对邮件应用感兴趣的开发者来说,是一份宝贵的参考资料。下面,我们将深入探讨这份源码中的关键知识点。 1. **Activity与...

Global site tag (gtag.js) - Google Analytics