2016-12-22 3 views
3

Я использую Application_NewMailEx для обработки всех полученных сообщений. Он отлично работает на электронных письмах, полученных во время открытия Outlook.Outlook Application_NewMailEx не работает при запуске

Однако при запуске Application_NewMailEx не получает звонки по полученным электронным письмам.

Я пробовал использовать Application_Startup, но он вызывается до получения сообщений электронной почты ==> не работает. Существует не application.ontime для задержки запуска макроса ... Application_NewMail делает то же самое.

Как это сделать?

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) 
    INIT_FOLD 
    TreatMsg Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection) 
End Sub 
+0

Вы можете разместить некоторые из кода надстройки? –

+0

Привет, нет addin, просто код в модуле и thisoutlooksession. Я добавлю его – Pierre

+0

SInce addin загружается при запуске Outlook, поэтому маловероятно, что новое почтовое событие будет запущено при запуске. Вы можете отложить новую обработку почты, если вы сохраняете информацию обо всех почтовых сообщениях. – sameerkn

ответ

2

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

Вы можете обрабатывать непрочитанные письма в папке «Входящие» при запуске (Items.Restrict или Items.Find/FindNext), предполагая, что новые необработанные сообщения по-прежнему непрочитаны или (в случае кэширования) используют событие Items.ItemAdd на Папка «Входящие» - она ​​срабатывает, когда ваш файл OST синхронизируется с удаленным почтовым ящиком.

+0

Я не понимаю, что вы имеете в виду. Когда внешний вид открыт, никакого кода не работает, NewMailEx вызывается на каждое полученное сообщение. Я проверю Items.ItemAdd, спасибо. Прямо сейчас я обошел проблему через уродливый код: Outlook запускает при запуске VBS, который ждет несколько секунд, прежде чем вызывать код VBA Outlook, который обрабатывает последнее сообщение, пока не увидит прочитанный. Уродливый, но обойти отсутствие application.ontime в перспективе. – Pierre

+0

Я посмотрел, действительно, Items.ItemAdd эффективен. Я предпочитаю NewMailEx, когда внешний вид открыт (одно событие на почту, даже если оно одновременно, в отличие от items.add, одно событие на блок писем), поэтому я заменил свой уродливый код Items.ItemAdd, но на первом NewMailEx I выгрузите его. Пока все хорошо, спасибо! – Pierre

1

Элементы Item.ItemAdd и NewMailEx не работают, если у вас есть более 8 элементов. Microsoft не гарантирует, что это вызовет это событие.

2

Вот пример того, как настроить запуск приложения и запустить свой VBA, когда MailItem это добавить в папку Входящие

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 
     Example Item ' call sub 
    End If 
End Sub 

Public Sub Example(ByVal Item As Object) 
    Debug.Print Item.Subject ' Immediate Window 
End Sub 

Application.Startup Event (Outlook) и Items.ItemAdd Event (Outlook)

Items.ItemAdd Event (Outlook) Происходит при добавлении одного или нескольких предметов в указанную коллекцию. Это событие не запускается, когда сразу же добавляется большое количество элементов в папку. Это событие недоступно в Microsoft Visual Basic Scripting Edition (VBScript).


Application.Startup Event (Outlook) Происходит, когда Microsoft Outlook начинает, но после того, как были загружены все дополнения в программы.


+1

Спасибо, кажется, я неправильно использовал mailitem. Кажется, теперь все хорошо! – Pierre

Смежные вопросы