Проблема заключается в том, что Microsoft преобразует «офисный HTML» (я не уверен, что правильный термин) в обычный HTML, прежде чем он запускает событие ItemSend (), которое вызывает исчезновение закладки _MailAutoSig.
Единственный способ вернуть закладку _MailAutoSig - это сначала ОТМЕНИТЬ событие ItemSend (), затем запустить таймер, чтобы запустить функцию, которая, в свою очередь, будет обращаться к объекту электронной почты и манипулировать им, как вам нужно, добавить свойство пользователя, чтобы пометитьэлектронная почта была обработана, а затем отправьте ее снова.
Например:
Dim modItem As Object 'need to hold the item somewhere so the timer can access it
Sub object_ItemSend(ByVal Item As Object, Cancel As Boolean)
If Item.UserProperties.Item("isModded") Is Nothing Then
'User has composed a mail and hit "Send", we need to make our modifications to the signature though
modItem = item
Cancel = True 'cancel the Send so we can make the modifications
mytimer.Enabled = True 'fire off a timer to make the modifications
Exit Sub
Else
Item.UserProperties.Item("isModded").Delete 'this flag will keep the email from ping-ponging between ItemSend and the timer
End If
End Sub
'10 millisecond timer? I think the cancel is almost instant, but experiment
Sub mytimer_Timer()
mytimer.Enabled = False
If Not modItem Is Nothing Then
modItem.HtmlBody = ...... the signature bookmark will be intact again, so make your modifications ......
modItem.UserProperties.Add("isModded", olText) 'no ping-pong
modItem.Send 'send it again
modItem = Nothing
End If
End Sub
Мне пришлось сделать что-то подобное для проекта, где некоторые поля Outlook не были установлены, пока я не был всобытие ItemSend (), поэтому я вынужден был отправить электронное письмо, получить информацию, а затем отменить отправку.Это сработало великолепно.
Теперь, это было написано на моей голове, поэтому я уверен, что приведенный выше код не будет идеальным, но он должен дать вам представление о том, что нужно сделать.