Я создаю плагин для Outlook, которому необходимо изменить несколько свойств MailItem
, когда пользователь нажимает «ответить» на любое электронное письмо. Сейчас я делаю что-то вроде этого:
Private Sub PrepareEmailForReply(ByVal MailItem As Outlook.MailItem, ByVal FromAddress As String)
If Not ReplyDictionary.ContainsKey(MailItem.ConversationID) Then
ReplyDictionary.Add(MailItem.ConversationID, FromAddress)
AddHandler MailItem.Reply, Sub()
InReply = True
End Sub
End If
End Sub
Private Sub CurrentExplorer_SelectionChange() Handles CurrentExplorer.SelectionChange
Dim SelectedFolder As Outlook.MAPIFolder = Me.Application.ActiveExplorer().CurrentFolder
Try
If Me.Application.ActiveExplorer.Selection.Count > 0 Then
Dim SelectedObject As Object = Me.Application.ActiveExplorer.Selection.Item(1)
If (TypeOf SelectedObject Is Outlook.MailItem) Then
Dim MailItem As Outlook.MailItem = TryCast(SelectedObject, Outlook.MailItem)
If (CurrentEmail IsNot MailItem) Then
Output.AddInfo(MailItem.ConversationTopic)
CurrentEmail = MailItem
If (InReply) Then
Output.AddInfo("> In Reply")
If ReplyDictionary.ContainsKey(MailItem.ConversationID) Then
MailItem.Subject = "Testing Reply Email"
End If
Else
Output.AddInfo("> In MailItem")
For Each Recipient As Outlook.Recipient In MailItem.Recipients
Dim CurrentEmailAddress As String = Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress.ToLower.Trim()
If ListeningUsers.Contains(CurrentEmailAddress) Then
PrepareEmailForReply(MailItem, CurrentEmailAddress)
Exit For
End If
Next
End If
InReply = False
End If
End If
End If
Catch ex As Exception
End Try
End Sub
Все работает нормально, но MailItem в строке с надписью `MailItem.Subject =" Testing Reply Email "на самом деле не соответствует ответному электронному письму, поэтому тема не меняется.
Как мне получить MailItem для ответного электронного письма, чтобы я мог изменить его тему?
Переменная ListeningUsers
- это List(of String)
, который содержит список того, для каких электронных писем это действует. Он содержит текущего пользователя.
**РЕДАКТИРОВАТЬ: **
Здесь я добавил несколько изменений в вызов события MailItem.Reply:
AddHandler MailItem.Reply, Sub()
Dim CurrentInspector As Outlook.Inspector = Globals.ThisAddIn.Application.ActiveInspector()
Dim ReplyMailItem As Outlook.MailItem = TryCast(CurrentInspector.CurrentItem, Outlook.MailItem)
If (ReplyMailItem IsNot Nothing) Then
MsgBox("1: " & ReplyMailItem.Subject & " - " & ReplyMailItem.EntryID)
Return
End If
CurrentInspector = CurrentExplorer.ActiveInlineResponse
ReplyMailItem = TryCast(CurrentInspector.CurrentItem, Outlook.MailItem)
If (ReplyMailItem IsNot Nothing) Then
MsgBox("2: " & ReplyMailItem.Subject & " - " & ReplyMailItem.EntryID)
End If
End Sub
Первый msgbox
появится, если я открою электронное письмо во внешнем окне, а затем нажму «Ответить», однако, если я нажму «Ответить на электронное письмо внутри Outlook (не во всплывающем окне), то должен появиться второй msgbox
, но его нет.
Conversation
API. - person Brad Christie   schedule 07.07.2014mailitem
ответа, а затем изменить его, да ? - person Freesnöw   schedule 08.07.2014