Outlook VBA для создания автоответа с количеством непрочитанных писем в папке "Входящие"

Я пытаюсь создать автоответ, где я мог бы запустить скрипт с правилами для отправки автоответа.

Привет, спасибо за вашу почту, ваша почта помещена в очередь, перед вами 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.

Спасибо


person Thomas    schedule 09.05.2017    source источник
comment
Правильно ли настроен ваш макрос, чтобы разрешить запуск макроса?   -  person 0m3r    schedule 10.05.2017
comment
Привет, ребята. Настройки макроса позволяют все. Имеет ли значение, что я нахожусь в почтовом ящике обмена, а код затемняет почтовый ящик как папку mapi? Это единственная причина, о которой я могу думать.   -  person Thomas    schedule 10.05.2017


Ответы (2)


Ваше событие Items.ItemAdd< /strong> задан неправильно. Попробуйте использовать текущий код без правила Outlook. Обязательно перезапустите Outlook.

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
person 0m3r    schedule 10.05.2017
comment
Просто убедитесь, что вы опускаете S в элементах автоответа, иначе ошибка продолжится. Кроме того, если вы отправляете электронное письмо самому себе (как я иногда делаю, чтобы не отставать от работы), скрипт будет продолжать отвечать сам себе на неопределенный срок. - person Yogwhatup; 18.08.2017

Вам нужно создать правило в Outlook вручную и назначить этому правилу подпрограмму макроса VBA (AutoResponse). Только тогда вы запустите код.

В качестве возможного обходного пути вы можете обработать NewMailEx. событие Приложения, которое запускается при получении нового элемента в папке "Входящие". Событие возникает, когда новое сообщение поступает в папку «Входящие» и до обработки правила клиента. Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection, для вызова NameSpace. GetItemFromID и обработайте элемент. См. Правила и оповещения Outlook: запуск сценария. для получения дополнительной информации.

Для пользователей с учетной записью Exchange Server (режим Exchange без кэширования или режим кэширования Exchange) событие будет срабатывать только для сообщений, поступающих на сервер после запуска Outlook. Событие не срабатывает для сообщений, которые синхронизируются в режиме кэширования Exchange сразу после запуска Outlook, а также для сообщений, которые уже находятся на сервере, когда Outlook запускается в режиме Exchange без кэширования.

person Eugene Astafiev    schedule 09.05.2017
comment
Привет Евгений. Спасибо за помощь. Я сделал правило, и попробовал протестировать код, отправив почту по правилу. Код не сработал. Я думал, что это как-то связано с почтовым ящиком Dim. As MAPIFolder Set inbox = Application.GetNamespace(MAPI). _ - person Thomas; 09.05.2017
comment
Попробуйте запустить код под отладчиком и посмотрите, какая строка кода дает сбой. - person Eugene Astafiev; 10.05.2017