firemail
标题:
IMAP离线大文件保存---及压缩
[打印本页]
作者:
hechengjin
时间:
2016-3-27 22:18
标题:
IMAP离线大文件保存---及压缩
---问题描述:
1.存草稿时,当前附件太大,IMAP在线保存失败,采用离线保存带大附件的邮件到草稿箱中
2.带附件,但不是很大,可以发送成功,但不能成功追加到已发送,则离线保存到已发送邮件夹。---smtp服务器可以接收,但本账号的imap服务器无法接受。
3.对 草稿箱或已发送中带大附件的邮件进行删除时,要带大附件保存到已删除邮件夹
--问题解决原理和思路:
含大附件的邮件实际一直存在于mbox文件中,保是没有在邮件列表中显示,找出不在邮件列表中显示的关键点。
当执行同步时,对这种关键点的标志做了什么操作。
当执行压缩时,又对这些关键点做了什么操作。
如何做到无论是同步还是压缩时都不影响我们的这种邮件在邮件列表中的显示。
动态根据这种邮件的头标志 控制右键菜单功能的显示。
作者:
hechengjin
时间:
2016-3-27 22:19
line 1896 -- rv = bundle->GetStringFromName(NS_LITERAL_STRING("autoCompactAllFolders").get(), getter_Copies(confirmString));
int32_t totalExpungedBytes = 0; //总删除的邮件大小
int32_t offlineExpungedBytes = 0;
int32_t localExpungedBytes = 0;
totalExpungedBytes = localExpungedBytes + offlineExpungedBytes;
gFolderTreeController.compactFolders();
folders.compact(null, msgWindow);
as member of class nsImapMailFolder -- NS_IMETHODIMP nsImapMailFolder::Compact(nsIUrlListener *aListener, nsIMsgWindow *aMsgWindow)
return imapService->Expunge(this, aListener, aMsgWindow, nullptr);
NS_IMETHODIMP nsImapService::Expunge(nsIMsgFolder *aImapMailFolder,....)
{
FolderCommand(aImapMailFolder, aUrlListener, "/Expunge>", nsIImapUrl::nsImapExpungeFolder, aMsgWindow, aURL);
}
nsImapService::FolderCommand(nsIMsgFolder *imapMailFolder,..){rv = GetImapConnectionAndLoadUrl(imapUrl, nullptr, url);}
EXPUNGE命令在不关闭邮箱的情况下删除所有的标志为DELETED的邮件。EXPUNGE删除的邮件将不可以恢复。
例如: C: A202 EXPUNGE
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: * 5 EXPUNGE
S: * 8 EXPUNGE
S: A202 OK EXPUNGE completed
-----------右键菜单上的压缩也对应执行服务端标志为删除,但还占用存储空间的邮件?
复制代码
自动压缩单独线程中
nsMsgDBFolder::AutoCompact(nsIMsgWindow *aWindow){
nsCOMPtr<nsIRunnable> event = new AutoCompactEvent(aWindow, this);
if (event)
NS_DispatchToCurrentThread(event);
}
class AutoCompactEvent : public nsRunnable
{
NS_IMETHOD Run()
{
if (mFolder)
mFolder->HandleAutoCompactEvent(mMsgWindow);
return NS_OK;
}
}
nsresult nsMsgDBFolder::HandleAutoCompactEvent(nsIMsgWindow *aWindow)
{
if (okToCompact) { nsCOMPtr <nsIAtom> aboutToCompactAtom = MsgGetAtom("AboutToCompact");
NotifyFolderEvent(aboutToCompactAtom);
}
folderCompactor->CompactFolders(folderArray, offlineFolderArray, nullptr, aWindow);
CompactAllOfflineStores(nullptr, aWindow, offlineFolderArray);
}
nsFolderCompactState::CompactFolders(nsIArray *aArrayOfFoldersToCompact,...{
Compact(firstFolder, m_compactingOfflineFolders, aUrlListener,
m_folder->AcquireSemaphore(supports);return StartCompacting();
}
nsFolderCompactState::StartCompacting()
{
rv = m_messageService->CopyMessages(m_size, m_keyArray->m_keys.Elements(),
}
从指定位置 复制邮件
复制代码
欢迎光临 firemail (http://firemail.wang:8088/)
Powered by Discuz! X3