Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1932|回复: 1
打印 上一主题 下一主题

IMAP离线大文件保存---及压缩

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-3-27 22:18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
---问题描述:
1.存草稿时,当前附件太大,IMAP在线保存失败,采用离线保存带大附件的邮件到草稿箱中
2.带附件,但不是很大,可以发送成功,但不能成功追加到已发送,则离线保存到已发送邮件夹。---smtp服务器可以接收,但本账号的imap服务器无法接受。
3.对 草稿箱或已发送中带大附件的邮件进行删除时,要带大附件保存到已删除邮件夹

--问题解决原理和思路:
含大附件的邮件实际一直存在于mbox文件中,保是没有在邮件列表中显示,找出不在邮件列表中显示的关键点。
当执行同步时,对这种关键点的标志做了什么操作。
当执行压缩时,又对这些关键点做了什么操作。
如何做到无论是同步还是压缩时都不影响我们的这种邮件在邮件列表中的显示。

动态根据这种邮件的头标志 控制右键菜单功能的显示。
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-3-27 22:19:35 | 只看该作者
  1. line 1896 -- rv = bundle->GetStringFromName(NS_LITERAL_STRING("autoCompactAllFolders").get(), getter_Copies(confirmString));


  2. int32_t totalExpungedBytes = 0;   //总删除的邮件大小
  3. int32_t offlineExpungedBytes = 0;

  4. int32_t localExpungedBytes = 0;

  5. totalExpungedBytes = localExpungedBytes + offlineExpungedBytes;



  6. gFolderTreeController.compactFolders();
  7. folders.compact(null, msgWindow);

  8. as member of class nsImapMailFolder -- NS_IMETHODIMP nsImapMailFolder::Compact(nsIUrlListener *aListener, nsIMsgWindow *aMsgWindow)




  9. return imapService->Expunge(this, aListener, aMsgWindow, nullptr);


  10. NS_IMETHODIMP nsImapService::Expunge(nsIMsgFolder *aImapMailFolder,....)
  11. {
  12. FolderCommand(aImapMailFolder, aUrlListener, "/Expunge>", nsIImapUrl::nsImapExpungeFolder, aMsgWindow, aURL);
  13. }
  14. nsImapService::FolderCommand(nsIMsgFolder *imapMailFolder,..){rv = GetImapConnectionAndLoadUrl(imapUrl, nullptr, url);}
  15. EXPUNGE命令在不关闭邮箱的情况下删除所有的标志为DELETED的邮件。EXPUNGE删除的邮件将不可以恢复。

  16. 例如:    C: A202 EXPUNGE
  17.                S: * 3 EXPUNGE
  18.                S: * 3 EXPUNGE
  19.                S: * 5 EXPUNGE
  20.                S: * 8 EXPUNGE
  21.                S: A202 OK EXPUNGE completed
  22. -----------右键菜单上的压缩也对应执行服务端标志为删除,但还占用存储空间的邮件?
复制代码
  1. 自动压缩单独线程中
  2. nsMsgDBFolder::AutoCompact(nsIMsgWindow *aWindow){
  3. nsCOMPtr<nsIRunnable> event = new AutoCompactEvent(aWindow, this);
  4.     if (event)     
  5.   NS_DispatchToCurrentThread(event);
  6. }

  7. class AutoCompactEvent : public nsRunnable
  8. {
  9.    NS_IMETHOD Run()
  10.   {
  11.   if (mFolder)  
  12.    mFolder->HandleAutoCompactEvent(mMsgWindow);   
  13.      return NS_OK;  
  14. }
  15. }

  16. nsresult nsMsgDBFolder::HandleAutoCompactEvent(nsIMsgWindow *aWindow)
  17. {

  18. if (okToCompact)        {  nsCOMPtr <nsIAtom> aboutToCompactAtom = MsgGetAtom("AboutToCompact");

  19.          NotifyFolderEvent(aboutToCompactAtom);
  20. }
  21. folderCompactor->CompactFolders(folderArray, offlineFolderArray, nullptr, aWindow);
  22. CompactAllOfflineStores(nullptr, aWindow, offlineFolderArray);

  23. }

  24. nsFolderCompactState::CompactFolders(nsIArray *aArrayOfFoldersToCompact,...{

  25. Compact(firstFolder, m_compactingOfflineFolders, aUrlListener,
  26.   m_folder->AcquireSemaphore(supports);return StartCompacting();

  27. }

  28. nsFolderCompactState::StartCompacting()
  29. {
  30. rv = m_messageService->CopyMessages(m_size, m_keyArray->m_keys.Elements(),
  31. }
  32. 从指定位置 复制邮件
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-6 21:15 , Processed in 0.057951 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表