Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Outlook VBA创建自动回复收件箱中未读邮件数_Vba_Email_Outlook_Outlook 2016 - Fatal编程技术网

Outlook VBA创建自动回复收件箱中未读邮件数

Outlook VBA创建自动回复收件箱中未读邮件数,vba,email,outlook,outlook-2016,Vba,Email,Outlook,Outlook 2016,我正在尝试创建一个自动回复,在这里我可以触发一个带有规则的脚本来发送自动回复 “您好,谢谢您的邮件,您的邮件已排在队列中。您面前有XX多封电子邮件,我们将尽快回复。” XX应该是未读电子邮件的数量 我发现: Private Sub myOlItems_ItemAdd(ByVal Item As Object) End Sub Sub AutoResponse(objmsg As Outlook.MailItem) ' define my reply message Dim

我正在尝试创建一个自动回复,在这里我可以触发一个带有规则的脚本来发送自动回复

“您好,谢谢您的邮件,您的邮件已排在队列中。您面前有XX多封电子邮件,我们将尽快回复。” XX应该是未读电子邮件的数量

我发现:

Private Sub myOlItems_ItemAdd(ByVal Item As Object)

End Sub

Sub AutoResponse(objmsg As Outlook.MailItem)

    ' define my reply message
    Dim objReply As MailItem
    ' let's get ourselves the inbox!
    Dim inbox As MAPIFolder
    Set inbox = Application.GetNamespace("MAPI"). _
    GetDefaultFolder(olFolderInbox)

    ' Let's get this reply going!
    Set objReply = objmsg.Reply
    ' Subject Re: their subject. Standard
    objReply.Subject = "Re: " & objReply.Subject
    ' Body - you define this, use the variable for the unread count in inbox
    objReply.Body = "Your email has been received. I currently have " & inbox.UnReadItemCount & " unread emails in my inbox and I will get yours as soon as I can"

    ' Send this thing!
    objReply.Send
    ' Reset
    Set objReply = Nothing

End Sub

但它似乎不起作用。 我在Outlook 2016上使用exchange邮件服务器


谢谢

您需要在Outlook中手动创建一个规则,并将VBA宏子项(
AutoResponse
)分配给该规则。只有这样,您才能运行代码

作为一种可能的解决方法,您可以处理当收件箱中收到新项目时触发的应用程序事件。当新邮件到达收件箱时,在客户端规则处理发生之前,触发该事件。您可以使用EntryIDCollection数组中返回的条目ID来调用该方法并处理该项。有关更多信息,请参阅

对于具有Exchange服务器帐户(非缓存Exchange模式或缓存Exchange模式)的用户,事件将仅针对Outlook启动后到达服务器的邮件触发。Outlook启动后立即以缓存Exchange模式同步的邮件,以及Outlook以非缓存Exchange模式启动时服务器上已存在的邮件,都不会触发此事件。

您的设置不正确,请尝试不带Outlook规则的流动代码,确保重新启动Outlook


嗨,尤金。谢谢你的帮助。我执行了规则,并尝试通过按照规则发送邮件来测试代码。代码没有触发。我认为这与Dim收件箱有关,因为MAPIFolder Set inbox=Application.GetNamespace(“MAPI”)_试着在调试器下运行代码,看看哪行代码失败。您的宏设置允许宏运行吗?大家好。宏设置允许一切。我在exchange邮箱上,而代码将收件箱变暗为mapi文件夹,这有什么区别吗?这是我能想到的唯一原因。只需确保在自动响应项中删除“s”,否则它将继续出错。此外,如果您自己给自己发电子邮件(就像我有时为了跟上工作而做的那样),脚本将继续无限期地回复自己。
Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Dim Inbox  As Outlook.MAPIFolder

    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set Items = Inbox.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)

    If TypeOf Item Is Outlook.mailitem Then
        AutoResponse Items
    End If

End Sub

Private Sub AutoResponse(Item As Outlook.mailitem)
    Dim Reply As Outlook.mailitem ' Reply msg
    Dim Inbox As Outlook.MAPIFolder ' Inbox

    Set Inbox = Application.GetNamespace("MAPI") _
                .GetDefaultFolder(olFolderInbox)

    ' Let's get this reply going!
    Set Reply = Item.Reply
    ' Subject Re: their subject. Standard
    Reply.subject = Reply.subject

    ' Body - you define this, use the variable for the unread count in inbox
    Reply.HTMLBody = "Your email has been received. I currently have " & _
                      Inbox.UnReadItemCount & _
              " unread emails in my inbox and I will get yours as soon as I can"

    ' Send this thing!
    Reply.Send
    ' Reset
    Set Reply = Nothing

End Sub