Скрипт для создания последующего действия с почтовым сообщением в Outlook - PullRequest
0 голосов
/ 01 декабря 2010

Я получаю два сообщения каждый день. Второе сообщение должно прибыть в течение 3,5 часов; если нет, я должен начать выяснять, что пошло не так со вторым процессом, который удерживал это письмо от отправки.

Вот что я хотел бы увидеть.

  1. Сообщение приходит 1
  2. Правило выполняет и помечает сообщение для последующего (или чего-либо еще) 3,5 часа с того времени.

В мастере правил Outlook есть опция "Run script", которую я бы использовал для запуска скрипта.

Бонусные баллы:

3. Когда приходит второе электронное письмо, оно удаляет флаг следования из первого сообщения.

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вот что я сделал:

Sub MyRule(Item As Outlook.MailItem)
   MsgBox "Mail one has arrived: " & Item.Subject
   Dim newMail As Outlook.MailItem
   Set newMail = Outlook.CreateItem(olMailItem)
   newMail.To = Item.To
   newMail.Subject = "!!!Start looking for issues!!!!"
   newMail.Body = "Something might have gone wrong with the process.. You did not receive any closing mail for " + Item.Subject + " received on " + Item.ReceivedTime
   newMail.DeferredDeliveryTime = DateAdd("h", 3.5, Now)
   newMail.Send
End Sub

Это письмо хранится в вашей папке исходящих сообщений в течение 3,5 часов, а затем отправляется.

Это работает, только если вы работаете с Outlook примерно через 3,5 часа после первой почты.До тех пор, пока вы пытаетесь закрыть outlook, он скажет, что в папке исходящих сообщений есть элементы, которые не отправлены.Вы можете спокойно проигнорировать это предупреждение, но убедитесь, что у вас запущен Outlook.

(часть кода была написана и протестирована в Outlook. Но текст и тему я набрал за пределами редактора VB.возможно, придется устранить незначительные ошибки.)

РЕДАКТИРОВАТЬ :: для бонусных баллов ..

Sub MyRuleForMessageTwo(Item As Outlook.MailItem)
    Dim myitem As Outlook.MailItem
    Set OutboxItems = Application.Session.GetDefaultFolder(olFolderOutbox).Items
    Set myitem = OutboxItems.GetFirst
    Do While Not (myitem Is Nothing)
        If myitem.Subject = "!!!Start looking for issues!!!!" Then
            myitem.Delete
            Exit Do
        End If
        Set myitem = OutboxItems.GetNext
    Loop
End Sub

Вы можете поиграть с критериями соответствия, если вы ожидаете, что больше, чемодно сообщение будет находиться в вашем почтовом ящике, и вы хотите удалить только одно.

1 голос
/ 02 декабря 2010

Прежде всего, звучит так, будто вы создаете странную штуковину Рубе Голдберга, но это будет вашей проблемой, а не моей, так что веселитесь!

alt text

Я бы сделал так, чтобы написать простой скрипт, который перебирает все сообщения в папке входящих. Настройте запуск сценария каждые пять минут или около того.

Когда он находит первое сообщение пары, он записывает время прибытия сообщения. Если он находит второе сообщение, он проверяет, что оно пришло в течение 3,5 часов. Если он не находит второе сообщение, он проверяет, прошло ли 3,5 часа, и предупреждает вас об этом.

Нет необходимости устанавливать флаги для первого сообщения. Это не даст вам никакой дополнительной информации, которую ваш скрипт не сможет выяснить позже.

...