Help!

Trap email send event

 
  

Post new topic   General Reply to Topic (not reply to a specific post)    Forums Home -> Program Add-Ins RSS
Next:  Set graph attributes in worksheet?  
Author Message
Mark B
External


Since: Apr 01, 2009
Posts: 7



PostPosted: Wed Sep 30, 2009 8:10 am    Post subject: Trap email send event
Archived from groups: microsoft>public>outlook>program_addins (more info?)

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.OlDefaultFolders.olFolderSentMail);
defaultFolder.Items.ItemAdd += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(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
Back to top
Ken Slovak - [MVP - Outlo
External


Since: Oct 17, 2003
Posts: 3355



PostPosted: Wed Sep 30, 2009 9:05 am    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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" <none123 RemoveThis @none.com> wrote in message
news:Ok$KH$bQKHA.508@TK2MSFTNGP06.phx.gbl...
> 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.OlDefaultFolders.olFolderSentMail);
> defaultFolder.Items.ItemAdd += new
> Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(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
Back to top
Mark B
External


Since: Apr 01, 2009
Posts: 7



PostPosted: Wed Sep 30, 2009 11:10 pm    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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_ItemAddEventHandler(Application_SentItemsAdditionHandler);
}


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_ItemAddEventHandler'
C:\Users\Mark\Desktop\MyAddin\ThisAddIn.cs 325 46 MyAddin





"Ken Slovak - [MVP - Outlook]" <kenslovak.TakeThisOut@mvps.org> wrote in message
news:%23cj1p6cQKHA.764@TK2MSFTNGP02.phx.gbl...
> 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" <none123.TakeThisOut@none.com> wrote in message
> news:Ok$KH$bQKHA.508@TK2MSFTNGP06.phx.gbl...
>> 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.OlDefaultFolders.olFolderSentMail);
>> defaultFolder.Items.ItemAdd += new
>> Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(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
>
Back to top
Ken Slovak - [MVP - Outlo
External


Since: Oct 17, 2003
Posts: 3355



PostPosted: Thu Oct 01, 2009 9:16 am    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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" <none123.DeleteThis@none.com> wrote in message
news:eUxix0jQKHA.4592@TK2MSFTNGP06.phx.gbl...
> 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_ItemAddEventHandler(Application_SentItemsAdditionHandler);
> }
>
>
> 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_ItemAddEventHandler'
> C:\Users\Mark\Desktop\MyAddin\ThisAddIn.cs 325 46 MyAddin
Back to top
Mark B
External


Since: Apr 01, 2009
Posts: 7



PostPosted: Sat Oct 03, 2009 12:10 am    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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_ItemAddEventHandler(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_ItemAddEventHandler(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.
Back to top
Mark B
External


Since: Apr 01, 2009
Posts: 7



PostPosted: Sat Oct 03, 2009 12:10 am    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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_ItemAddEventHandler(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_ItemAddEventHandler(Items_ItemAdd);
}
Back to top
Ken Slovak - [MVP - Outlo
External


Since: Oct 17, 2003
Posts: 3355



PostPosted: Mon Oct 05, 2009 9:18 am    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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" <none123.RemoveThis@none.com> wrote in message
news:elsb7X9QKHA.220@TK2MSFTNGP02.phx.gbl...
> 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_ItemAddEventHandler(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_ItemAddEventHandler(Items_ItemAdd);
> }
Back to top
Mark B
External


Since: Apr 01, 2009
Posts: 7



PostPosted: Thu Oct 08, 2009 10:10 pm    Post subject: Re: Trap email send event [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

Thanks Ken. All works fine after doing that.
Back to top
Display posts from previous:   
Post new topic   General Reply to Topic (not reply to a specific post)    Forums Home -> Program Add-Ins All times are: Eastern Time (US & Canada) (change)
Page 1 of 1

 
You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum