![]() |
Trap email send event
VSTO C#, OL2007
I want to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. I started, finding the following code on the internet but being new to C# and VSTO I have had some difficulties with syntax errors with it. using Outlook = Microsoft.Office.Interop.Outlook; defaultFolder = this.Session.GetDefaultFolder(Outlook.OlDefaultFol ders.olFolderSentMail); defaultFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(SentItems_ItemAdd); Can anyone help me with some code to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. TIA |
Trap email send event
The way that code is written you would get that event handler garbage
collected and fail to fire at some point. Declare and instantiate an Items collection at module or class level and hook your ItemAdd() handler to that so your handler doesn't get garbage collected. In ItemAdd() you are passed an Item object. Cast that to a MailItem object and then use string replace function to get rid of the unwanted text. Something like this would do it, add exception handling of course: Outlook.Mailitem mail = (Outlook.MailItem)Item; string newBody = mail.Body.Replace("My Special Sentence", ""); mail.Body = newBody; If you are getting syntax errors be specific on what and where, if you want help with them. -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm "Mark B" wrote in message ... VSTO C#, OL2007 I want to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. I started, finding the following code on the internet but being new to C# and VSTO I have had some difficulties with syntax errors with it. using Outlook = Microsoft.Office.Interop.Outlook; defaultFolder = this.Session.GetDefaultFolder(Outlook.OlDefaultFol ders.olFolderSentMail); defaultFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(SentItems_ItemAdd); Can anyone help me with some code to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. TIA |
Trap email send event
From ThisAddIn_Startup I call mAddSentItemsHandler:
public void mAddSentItemsHandler() { Outlook.MAPIFolder sentItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder Microsoft.Office.Interop.Outlook.OlDefaultFolders. olFolderSentMail); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Application_SentItemsAdditionHandle r); } public void Application_SentItemsAdditionHandler() { MessageBox.Show("Sent"); } I get the following error with a red underline under Application_SentItemsAdditionHandler in the mAddSentItemsHandler method: Error 7 No overload for 'Application_SentItemsAdditionHandler' matches delegate 'Microsoft.Office.Interop.Outlook.ItemsEvents_Item AddEventHandler' C:\Users\Mark\Desktop\MyAddin\ThisAddIn.cs 325 46 MyAddin "Ken Slovak - [MVP - Outlook]" wrote in message ... The way that code is written you would get that event handler garbage collected and fail to fire at some point. Declare and instantiate an Items collection at module or class level and hook your ItemAdd() handler to that so your handler doesn't get garbage collected. In ItemAdd() you are passed an Item object. Cast that to a MailItem object and then use string replace function to get rid of the unwanted text. Something like this would do it, add exception handling of course: Outlook.Mailitem mail = (Outlook.MailItem)Item; string newBody = mail.Body.Replace("My Special Sentence", ""); mail.Body = newBody; If you are getting syntax errors be specific on what and where, if you want help with them. -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm "Mark B" wrote in message ... VSTO C#, OL2007 I want to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. I started, finding the following code on the internet but being new to C# and VSTO I have had some difficulties with syntax errors with it. using Outlook = Microsoft.Office.Interop.Outlook; defaultFolder = this.Session.GetDefaultFolder(Outlook.OlDefaultFol ders.olFolderSentMail); defaultFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(SentItems_ItemAdd); Can anyone help me with some code to remove the phrase "My Special Sentence" from every email after it gets sent and appears in the Sent Items folder. TIA |
Trap email send event
If you are going to add event handlers you need to match their signatures
with the signature of the event you are planning to handle. If you were to look in the Object Browser for the signature for the ItemAdd() event you would see that there's an object passed to the handler to tell it what was added. -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm "Mark B" wrote in message ... From ThisAddIn_Startup I call mAddSentItemsHandler: public void mAddSentItemsHandler() { Outlook.MAPIFolder sentItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder Microsoft.Office.Interop.Outlook.OlDefaultFolders. olFolderSentMail); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Application_SentItemsAdditionHandle r); } public void Application_SentItemsAdditionHandler() { MessageBox.Show("Sent"); } I get the following error with a red underline under Application_SentItemsAdditionHandler in the mAddSentItemsHandler method: Error 7 No overload for 'Application_SentItemsAdditionHandler' matches delegate 'Microsoft.Office.Interop.Outlook.ItemsEvents_Item AddEventHandler' C:\Users\Mark\Desktop\MyAddin\ThisAddIn.cs 325 46 MyAddin |
Trap email send event
Getting there I hope... :
This seems to compile fine: public void mFolderAdditionsHandler() { //Add Sent Items Folder Watch Outlook.MAPIFolder sentItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderSentMail); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); //Add Deleted Items Folder Watch Outlook.MAPIFolder deletedItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderDeletedItems); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); } As does this: public void Items_ItemAdd(object Item) { MessageBox.Show("Sent or Deleted"); } However when I send or delete in Outlook, no message box pops up. I've walked through mFolderAdditionsHandler at runtime with no errors. |
Trap email send event
Typo, mFolderAdditionsHandler should read with
deletedItemsFolder.Items.ItemAdd as below: public void mFolderAdditionsHandler() { //mb //Add Sent Items Folder Watch Outlook.MAPIFolder sentItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderSentMail); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); //Add Deleted Items Folder Watch Outlook.MAPIFolder deletedItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderDeletedItems); deletedItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); } |
Trap email send event
I've said this previously, and I'll repeat it again one last time.
You need to declare an Items collection at class level for your event handler. One Items object for each folder. Your non-declared Items collection is going out of scope and being garbage collected once your event adder procedure ends. Also, using compound dot operators with COM objects leads to implicit objects being created that you have no control over. You need something like this: // class level Outlook.Items sentItems = null; Outlook.Items deletedItems = null; public void mFolderAdditionsHandler() { Outlook.MAPIFolder folder = // get a folder sentItems = folder.Items // now assign handler to the collection, repeat for other Items -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm "Mark B" wrote in message ... Typo, mFolderAdditionsHandler should read with deletedItemsFolder.Items.ItemAdd as below: public void mFolderAdditionsHandler() { //mb //Add Sent Items Folder Watch Outlook.MAPIFolder sentItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderSentMail); sentItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); //Add Deleted Items Folder Watch Outlook.MAPIFolder deletedItemsFolder = Globals.ThisAddIn.Application.GetNamespace("MAPI") .GetDefaultFolder(Microsoft.Office.Interop.Outlook .OlDefaultFolders.olFolderDeletedItems); deletedItemsFolder.Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd); } |
Trap email send event
Thanks Ken. All works fine after doing that.
|
All times are GMT +1. The time now is 12:25 PM. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com