将 Outlook 2010(Exchange)设置为减少检查电子邮件的频率

将 Outlook 2010(Exchange)设置为减少检查电子邮件的频率

我希望 Outlook 减少检查我的电子邮件的频率。我知道发送/接收组,但据我了解,如果它通过 Exchange 检查电子邮件,则该设置无关紧要,电子邮件检查是即时的。为了避免工作流程中断,我希望它每 30 分钟或 60 分钟或任何时间只向我显示一次新电子邮件。有没有办法从用户端做到这一点(我不是管理员)?我可以通过单击“脱机工作”手动完成,但我希望 Outlook 为我完成此操作。

谢谢,本

答案1

使用 Exchange 帐户时,Outlook 不会像使用 POP3 或 IMAP 帐户那样定期轮询服务器以查找新邮件。相反,Exchange 服务器使用推送通知来通知 Outlook 客户端何时收到新邮件。

因此,仅有的您对 Outlook 检查来自 Exchange 帐户的邮件频率的控制是离线办公按钮。Outlook 应用程序中的所有其他发送和接收选项对 Exchange 帐户均无效。遗憾的是,Outlook 在 UI 中没有任何选项可用于指定根据计划离线和在线。

使用 Exchange 帐户控制 Outlook 中的发送/接收行为的选项/解决方法是:

  1. 手动调用离线办公当您想要检查新邮件时,请按按钮。请记住,当您离线时,您发送的消息将不会发送,直到您重新在线为止。
  2. 造成一种幻觉,让 Outlook 在您准备查看邮件之前没有收到任何邮件:

    A.关闭所有新消息Outlook 选项中的通知

    B. 为收件箱文件夹创建自定义视图,隐藏今天收到的新邮件。当您不想知道最近收到的新邮件时,可以使用它。

选项 2 有其缺陷。到目前为止,我发现最好的解决方法是手动使用离线办公按钮。

答案2

我能想到的唯一解决方案是运行一些 VBA,每 x 分钟触发一次“发送/接收”功能。

基于这个答案来自 Stack OverflowMSDN 上的这个答案经过一些非常小的调整,我认为这个解决方案应该有效。

将以下代码放置在ThisOutlookSession模块中(工具 -> 宏 -> VB 编辑器):

Private Sub Application_Quit()
    If TimerID <> 0 Then Call DeactivateTimer 'Turn off timer upon quitting **VERY IMPORTANT**
End Sub

Private Sub Application_Startup()
    Call ActivateTimer(30) 'Set timer to go off every 30 minutes
End Sub

新的 VBA 模块中的代码如下:

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Public TimerID As Long 'Need a timer ID to eventually turn off the timer. If the timer ID <> 0 then the timer is running

Public Sub ActivateTimer(ByVal nMinutes As Long)
    nMinutes = nMinutes * 1000 * 60 'The SetTimer call accepts milliseconds, so convert to minutes
    If TimerID <> 0 Then Call DeactivateTimer 'Check to see if timer is running before call to SetTimer
    TimerID = SetTimer(0, 0, nMinutes, AddressOf TriggerTimer)
    If TimerID = 0 Then
        MsgBox "The timer failed to activate. Checking of email will not happen."
    End If
End Sub

Public Sub DeactivateTimer()
    Dim lSuccess As Long
    lSuccess = KillTimer(0, TimerID)
    If lSuccess = 0 Then
        MsgBox "The timer failed to deactivate."
    Else
        TimerID = 0
    End If
End Sub

Public Sub TriggerTimer(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)
    'keeps calling every X Minutes unless deactivated
    If idevent = TimerID Then Call SyncOL
End Sub

Public Sub SyncOL()
    ' Synchronizes (ie sends/receives) OL folders.
    ' Ref: http://msdn.microsoft.com/en-us/library/ff863925.aspx

    Dim appOL As Outlook.Application, objNsp As Outlook.NameSpace
    Dim colSyc As Outlook.SyncObjects, objSyc As Outlook.SyncObject
    Dim i As Integer

    On Error GoTo SyncOL_Err

    ' Use late binding to avoid the "Reference" issue.
    If isAppThere("Outlook.Application") = False Then
        Set appOL = CreateObject("Outlook.Application")  ' OL not open
    Else
        Set appOL = GetObject(, "Outlook.Application")  ' OL already open
    End If

    Set objNsp = appOL.Application.GetNamespace("MAPI")
    Set colSyc = objNsp.SyncObjects

    For i = 1 To colSyc.Count
        Set objSyc = colSyc.Item(i)       
        ' Debug.Print objSyc.Name
        objSyc.start
    Next

    ' Call MsgBox("Outlook synchronization initiated ...", vbInformation)

    SyncOL_Exit:
    Set appOL = Nothing: Set objNsp = Nothing: Set colSyc = Nothing: Set objSyc = Nothing
    Exit Sub

    SyncOL_Err:
    MsgBox "error=" & Err.Number & " " & Err.Description & " in SyncOL()"
    Resume SyncOL_Exit
End Sub

一旦启动并运行(并且您已禁用推送或任何现有计时器),则此代码将每 30 分钟运行一次并触发发送和接收。由于我没有将 Outlook 连接到 Exchange,因此无法验证这是否真的有效。

相关内容