我花了很多时间在 Outlook 上,因为连接不稳定。多年来,我注意到如果在同步过程中与 Exchange 失去连接,UI 通常会冻结几秒钟,有时甚至更长。我不明白为什么 Exchange 同步不是异步的——其他 MUA(如 Thunderbird 和 mail.app)不会这样。我一直想知道这是否是 Outlook 的正常行为,以及/或者是否有任何解决方法,除了完全离线工作,然后定期手动在线同步最近的邮件。
我确实启用了缓存交换模式,并且缓存全部我的本地邮件。
我目前正在 Win10 22H2 上使用最新版本的 O365 桌面应用程序,但已经看到这个问题 20 多年了。
答案1
我同意使用快捷键设置离线模式更快。如果你使用脚本,你可能需要同步对象切换离线模式的方法。定时后台切换可能需要额外的脚本(例如计时器或循环)。
答案2
这是一个 autohotkey 脚本,它会在定义的时间内离线,然后在定义的不同时间内在线。它还需要实现 VBA 代码(如下所示)以将“同步”状态存储在持久存储项中。这是一个非常糟糕的黑客行为,但似乎可以完成工作。
{
TimeOff := 15
TimeOn := 1
Outlook := ComObjActive("Outlook.Application")
; always start online
if ( Outlook.GetNamespace("MAPI").Offline ) {
Outlook.ActiveExplorer.CommandBars.ExecuteMSO("ToggleOnline")
}
loop {
; go offline
Outlook.ActiveExplorer.CommandBars.ExecuteMSO("ToggleOnline")
; wait TimeOff minutes
Sleep TimeOff*60000
; go online
Outlook.ActiveExplorer.CommandBars.ExecuteMSO("ToggleOnline")
done := 1
; wait TimeOn minutes
Sleep TimeOn*60000
; force sync
Outlook.Session.SyncObjects.Item(1).start
; don't go offline again until sync is done
while (done != 0) {
done := Outlook.Session.GetDefaultFolder(6).GetStorage("sync",0).UserProperties("online").value
Sleep 1000
}
}
}
然后在 Outlook VBA 中:
Public myStorage As Outlook.StorageItem
Private Sub Application_Startup()
SyncRunning = False
Set mySync = Session.SyncObjects.Item(1)
Set myStorage = Application.Session.GetDefaultFolder(olFolderInbox).GetStorage("sync", olIdentifyBySubject)
myStorage.UserProperties("online").Value = 10
myStorage.Save
End Sub
Private Sub mySync_SyncEnd()
myStorage.UserProperties("online").Value = 0
myStorage.Save
End Sub
Private Sub mySync_SyncStart()
myStorage.UserProperties("online").Value = 1
myStorage.Save
End Sub
Private Sub Application_Quit()
Set mySync = Nothing
End Sub