One of the most frequent questions we get concerning the Outlook Object Model is “How to handle the Send button event?”
Well, if you want to know:
- How to hook the ItemSend event (Send button event) in an Outlook email inspector?
- How to prevent the message from being sent?
- How to add / delete addressees at the moment of sending?
- How to modify attachments when an e-mail message is being sent?
- How to change Subject and Body of the outgoing email message?
Here is the answer to all the questions above:
You need to use the Application.ItemSend event. This event is raised immediately after clicking the much talked-about Send button but before the Inspector containing the item being sent is closed. Using the ItemSend event you can do all the above, and besides that copy the original item to some folder, copy the original item and send it to other recipients, save the item to a file, etc.
Below you can see a code example showing how to process MailItem:
Private Sub adxOutlookEvents_ItemSend(ByVal sender As System.Object, _
ByVal e As AddinExpress.MSO.ADXOlItemSendEventArgs) _
Handles adxOutlookEvents.ItemSend
e.Cancel = False
Dim mailItem As Outlook._MailItem = TryCast(e.Item, Outlook._MailItem)
If mailItem IsNot Nothing Then
Dim olForm As ADXOlForm1 = TryCast(_
AdxOlFormsManager1.Items(0).FormInstances(0), ADXOlForm1)
mailItem.Save()
If olForm.checkBoxAddRecipient.Checked Then
mailItem.Recipients.Add(olForm.textBoxAddRecipient.Text)
End If
If olForm.checkBoxModifySubject.Checked Then
mailItem.Subject = (mailItem.Subject & " ") +_
DateTime.Now.ToString()
End If
If olForm.checkBoxAddTextBody.Checked Then
DoAddTextBody(mailItem, olForm)
End If
If olForm.checkBoxAddAttachment.Checked Then
DoAddAttachment(mailItem, olForm)
End If
If olForm.checkBoxSaveMailItemFolder.Checked Then
DoSaveMailItemFolder(mailItem, olForm)
End If
If olForm.checkBoxSaveMailItemFile.Checked Then
DoSaveMailItemFile(mailItem, olForm)
End If
If olForm.checkBoxForbidSending.Checked Then
e.Cancel = True
System.Windows.Forms.MessageBox.Show("Action canceled!")
End If
End If
End Sub
In a similar way you can process other items that can be sent by Outlook, e.g. TaskRequestItem and MeetingRequestItem.
You may also be interested in:
Outlook COM add-in programming
Advanced Outlook regions: To-Do bar, Reading pane, Navigation pane
Available downloads:
The sample add-ins below were written using Add-in Express for Office and .net
C# sample Outlook add-in for VS 2005
VB.NET sample Outlook add-in for VS 2005






2 Comments
Hi…
Great code. I am very novis in VB and MS technology, working mainly in Oracle.
Can you please let me know where exactly this code needs to be placed? In Tool -> Macro in outlook or some where else.
Thanks,
Arijit
Hi Arijit,
The code above is VB.NET code, not VBA. This code (as well as the blog post itself) shows how to handle the ItemSend event in a COM add-in based on our Add-in Express for Office and .net product.
I think you can handle the ItemSend event in VBA too, please have a look at the following MSDN article for details:
http://msdn.microsoft.com/en-us/library/aa171284(v=office.11).aspx