Trap email send event

  • Thread starter Thread starter Mark B
  • Start date Start date
Status
Not open for further replies.
M

Mark B

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
 
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.

"Mark B" <none123@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
 
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
<kenslovak@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.

> >

>

> "Mark B" <none123@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

>
 
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.

"Mark B" <none123@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
 
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.
 
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);

}
 
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

"Mark B" <none123@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);
> }
 
Status
Not open for further replies.
Similar threads
Thread starter Title Forum Replies Date
J Addin to trap email item open Outlook VBA and Custom Forms 2
J Addin to trap email item open Outlook VBA and Custom Forms 2
A trap outbound mail to update subject Outlook VBA and Custom Forms 6
J column with actual email address in Outlook Classic Using Outlook 2
S Not receving all email since converting from Outlook 2007 to Outlook Classic Using Outlook 3
Rupert Dragwater Outlook 365 taking too long to synchronize each time email is being checked Using Outlook 5
D Request help with a macro for forwarding email Outlook VBA and Custom Forms 7
e_a_g_l_e_p_i Need help updating email in Outlook 2021 Using Outlook 10
N Why does Outlook keeping adding to the email address I have in my notes portion of a contact? Using Outlook 2
P SPAM message about Comcast email migration to Yahoo Using Outlook 1
P anything new on the supposed shutdown of comcast.net email? Using Outlook 6
S Is there an add-in to PDF entire folders of email with Microsoft 365? Using Outlook 4
W frustrating trying to change email password Using Outlook 5
R File not found when sending email with attached pdf file Using Outlook 2
U Trouble sending large files to a email group but can to the individuals in that group Using Outlook 8
P Xfinity/Comcast email service stopping sometime in 2025 - warning Using Outlook 6
O Two identical email accounts in Offline Global Address List Using Outlook 2
H Spam email in Gmail not visible in Outlook Using Outlook 3
J Renegade spam URL line displayed in old local Outlook 365 email title Using Outlook 3
L Hide Selected Email Address from Address Book Using Outlook 5
Y QQ on Scheduled Delivery of an Email Using Outlook 0
T Replace Text in Email Subject Outlook VBA and Custom Forms 3
Rupert Dragwater Cannot reestablish gmail (email address) account in Outlook 365 Using Outlook 11
M Outlook 365 adding standard message in body of template email Outlook VBA and Custom Forms 3
E Create Rule to Forward Email if Subject Begins With Using Outlook 2
V iCloud For Windows v15.x - Missing Email Features ? Using Outlook 4
M Thunderbird email client - I wonder Using Outlook 1
D Outlook Desktop App Email Software Using Outlook 0
P Email and calendar entry text now shifts right about 3 tabs worth of space Using Outlook 1
J Outlook macro to run before email is being send Outlook VBA and Custom Forms 3
T Outlook 2010 Creating a email 'Group' in OL 2010 Using Outlook 2
D Send email from Outlook Alias using Mac? Using Outlook 7
T How to set Default FONT for Email composing ? Using Outlook 0
H Finding text in open email Outlook VBA and Custom Forms 12
T Why do Outlook Desktop 2021 tasks from my wife's email show up in my task pane? Using Outlook 2
A Opening a link from an email automatically Outlook VBA and Custom Forms 0
D Outlook 2021 New email reminder Using Outlook.com accounts in Outlook 1
Rupert Dragwater How do I remove an email ending with @gmail.com Using Outlook 4
M A plug in (or method) to keep email message formatting after it expires Using Outlook 1
L VBA to Triage Incoming Email Outlook VBA and Custom Forms 0
R Legacy Outlook on Mac Email Cache Using Outlook 0
P Email address auto-completes work fine on laptop, but no longer on desktop Using Outlook 3
S Create Outlook Task from Template and append Body with Email Body Outlook VBA and Custom Forms 4
H Copying email address(es) in body of email and pasting in To field Outlook VBA and Custom Forms 1
A Search folder and move the email Outlook VBA and Custom Forms 0
P VBA to add email address to Outlook 365 rule Outlook VBA and Custom Forms 0
farrissf Outlook 2016 Optimizing Email Searches in Outlook 2016: Seeking Insights on Quick Search vs Advanced Search Features Using Outlook 0
D Delete selected text in outgoing email body Outlook VBA and Custom Forms 0
F Graphics in email / Mac recipient garbled Using Outlook 0
D Outlook VBA forward the selected email to the original sender’s email ID (including the email used in TO, CC Field) from the email chain Outlook VBA and Custom Forms 2

Similar threads

Back
Top