firemail

标题: QQ邮箱邮件夹同步及邮件发送及邮件夹映射 [打印本页]

作者: hechengjin    时间: 2016-4-20 23:49
标题: QQ邮箱邮件夹同步及邮件发送及邮件夹映射
.QQ邮箱发邮件一直显示正在保存的问题。mailnews\compose\src\nsMsgCopy.cpp
aMsgSendObj->NotifyListenerOnStopCopy(NS_OK);
2.QQ邮件夹同步后出现一些英文名称的文件夹
把英文名称的文件夹对应到本地对应的常用邮件夹(如:send ---send message --已发送)中更换相应的图标和显示文字
默认邮件服务器上的已发送是sent邮件夹
而QQ邮件服务器确是sent messages,这样就造成发送的邮件不能正确的移动到对应的邮件夹(会一直尝试移动到sent邮件夹,而实际上应该是到sent messages邮件夹)
修改方案是同时支持 sent和sent messages,都映射到已发送邮件夹

QQ服务器上的sent邮件夹叫sent messages,我们得到sent messages的时候,就把nsMsgFolderFlags::Trash标志赋给sent messages,
当发送邮件后,把邮件复制到sent目录时自动就会复制到sent messages
协议命令list返回是sent messages文件夹,且返回后,已经创建完了对应的名称为sent messages且图标为默认文件夹的图标
后续要进行相应邮件夹图标和名称的修改时,默认创建的本地文件夹sent是写死是单独处理的,故这里处理sent对主机进行判断,只对QQ(hostName是@imap.qq.com)的后面加上 messages以对应到本地的已发送邮件夹
qq list返回





其它邮箱 list 返回




从上面两图分析知,本地实际存放邮件的文件夹名称即为 LIST后面的最后一列显示的名称 如 “&g0l6P3ux-” 等  QQ的为"Sent%20Messages"等
而QQ的中文显示则从语言包中来


对于类似QQ邮件夹这种不兼容的情况,我们这边统一提供类似foxmail的远程邮件夹定义方案,如下图:



这样对正常流程以外处理,可优先从自定义级别处理,即对于已知的不匹配的情况,如QQ的sent 和 sent messages 先默认自定义一下。

作者: hechengjin    时间: 2016-4-20 23:50
一般的服务器上的邮件夹名称为 inbox / drafts / sent / trash/  junk ,QQ的有所不同,inbox / drafts / sent messges/ deleted messages,所以在IMAP协议下发送的时候无法保存邮件到 “已发送”,客户端默认将已发送的邮件保存到sent,而QQ为sent messages,只要在发现时QQ邮箱时,将sent设置为sent message即可。 其他邮箱如果有类似情况,也是这个原因。


客户端建立本地目录的过程:
1 发送LIST / XLIST / LSUB,根据返回的结果建立本地文件夹(mail.server.default.using_subscription 开关控制使用LIST还是使用LSUB)
2 建立好本地文件夹后,更改文件夹的属性(为文件设置sent, trash,....等标记),更改图标和显示的文字。
3 当操作邮件后,客户端自动根据文件夹的标记将邮件存储到文件夹中。

涉及到的文件:
nsImapIncomingServer.cpp  (将文件夹对应主要在这个文件中)
nsImapProtocol.cpp
nsImapServerResponseParser.cpp
nsMsgDBFolder.cpp

为all-thunderbird.js增加mail.server.default.using_subscription,设置为false,默认没有这个选项,但是官方的版本有。

到tb_rel\mailnews\mailnews\base\util下执行make
到tb_rel\mail\app\profile 下执行make
到tb_rel\mailnews\imap\src下执行make
到tb_rel\mozilla\toolkit\library下执行make




欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3