Trap email send event

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
 
K

Ken Slovak - [MVP - Outlook]

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
 
M

Mark B

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

>
 
K

Ken Slovak - [MVP - Outlook]

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
 
M

Mark B

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

Mark B

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);

}
 
K

Ken Slovak - [MVP - Outlook]

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
D VBA Macro to Print and Save email to network location Outlook VBA and Custom Forms 1
B IMAP server rejects sent email - cannot deliver messages Using Outlook 2
TedSch Small vba to kill political email Outlook VBA and Custom Forms 3
X Open Hyperlinks in an Outlook Email Message (Help with Diane's solution) Outlook VBA and Custom Forms 3
e_a_g_l_e_p_i Email notifications changed with Outlook 2021 Using Outlook 8
glnz How to retrieve or redo Verizon.net email password without affecting Outlook connection? Using Outlook 1
Z Copy specific email body text Outlook VBA and Custom Forms 0
D ISOmacro to extract active mail senders name and email, CC, Subject line, and filename of attachments and import them into premade excel spread sheet Outlook VBA and Custom Forms 2
M Outlook 365 refuses to send email Using Outlook 1
B Search and Find Email by Folder Name Outlook VBA and Custom Forms 2
K Closing external IMAP email... Outlook 2013 Using Outlook 0
L Capture email addresses and create a comma separated list Outlook VBA and Custom Forms 5
C Email bomb processing Outlook VBA and Custom Forms 1
O What would be the recommended way to change an email address (family member)? Using Outlook 0
A Outlook 2016 Macro to Reply, ReplyAll, or Forward(but with composing new email) Outlook VBA and Custom Forms 0
L Checking Sender Email Address for trusted domain from list on intranet Outlook VBA and Custom Forms 4
J How do you disable address search box when typing @ in body of email? Using Outlook 0
S HTML Code Embedded in String Within Open Outlook Email Preventing Replace(Application.ActiveInspector.CurrentItem.HTMLBody From Working Outlook VBA and Custom Forms 4
Victor.Ayala Automated way to check the option "Show this folder as an email Address Book" Outlook VBA and Custom Forms 2
D Wrong email address in Outlook 2003 "From" tab in new outgoing emails Using Outlook 4
D Forwarding email based on the attachment file type and specific text found on the attachment file name Outlook VBA and Custom Forms 1
F Forward incoming email with 4 embedded images in the body without original sender Outlook VBA and Custom Forms 22
W Macro to Filter Based on Latest Email Outlook VBA and Custom Forms 6
D Create advanced search (email) via VBA with LONG QUERY (>1024 char) Outlook VBA and Custom Forms 2
C Outlook 2007 Removing then adding account restores junk email processing Using Outlook 0
G Place jpg in body of email Outlook VBA and Custom Forms 1
F Wishlist Outlook suddenly began synchronizing deleted items every time I delete a single email. Using Outlook 2
N Save Selected Email Message as .msg File Outlook VBA and Custom Forms 12
HarvMan Toggle between calendar and email in Outlook 365 Using Outlook 12
F Email being marked as Spam by Gmail and not being visible in Outlook Using Outlook 5
G Email time stamp Using Outlook 2
G Schedule recurring email and attachments display Outlook VBA and Custom Forms 3
G Save and Rename Outlook Email Attachments Outlook VBA and Custom Forms 0
B Need to Copy an email to a subfolder Outlook VBA and Custom Forms 2
M How to setup outlook after importing old account information - Entering email account info creates with "(1)" after the account! Using Outlook 1
K Multiple Rules on Single Email Using Outlook 2
F VBA to move email from Non Default folder to Sub folders as per details given in excel file Outlook VBA and Custom Forms 11
e_a_g_l_e_p_i Outlook 2010 How to set default email address for website links Using Outlook 3
O Same email address, same person, names in so many ways Using Outlook 4
D Create new email from the received Email Body with attachment Outlook VBA and Custom Forms 10
D Outlook launch email showing new unread email in reading pane Using Outlook 11
B Zoom automatically next email item (VBA) Outlook VBA and Custom Forms 2
K Outlook adds space to rows in HTML email signatures viewed on mobile Using Outlook 1
M HTML email signature in Outlook Using Outlook 3
M Respond to Outlook Email Outlook VBA and Custom Forms 0
U Outlook locking up when replying to Email Using Outlook 7
S Email Generated from another program and then edited sends original email. Using Outlook 2

Similar threads

Top