Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Outlook and VBA (http://www.outlookbanter.com/outlook-vba/)
-   -   trap outbound mail to update subject (http://www.outlookbanter.com/outlook-vba/92295-trap-outbound-mail-update-subject.html)

andy tomic July 6th 09 09:29 PM

trap outbound mail to update subject
 
Hi all

Getting a little stuck on my outbound rules / vba code. I currently run an excellent addin called TAGLOCITY which tags emails with categories. What I am trying to do PREFIX the mail subject based on the category. NOTE: The taglocity addin triggers a category request AFTER the item.send action.

for example;
I have a category "100 Love St" (this is my project name)
I have a color for all PROJECTS -- construction project are DARKGREEN
When I send the mail I want the addin to check the subject for a ":"
Then if there is no ":", prefix with "Job:" and the category.

I have the code for this and it works fine if i manually trigger the vba code. I have a rule to hold the email in outbox for 1minute to give the program time to modify and for me to go in and cancel the send ;) . My question is how can I trigger the code to work AFTER the item.send command and there after the TAGLOCITY addin has had a chance to add in the category.

code below:
Sub PrefixMailItemInOutbox()
Dim oNS As Outlook.NameSpace
Dim oFld As Outlook.Folder
Dim oItems As Outlook.Items
Dim oItem As Object
Dim Item As Outlook.MailItem

On Error GoTo OL_Error

Set oNS = Application.GetNamespace("MAPI")
Set oFld = oNS.GetDefaultFolder(olFolderOutbox)

Set oItems = oFld.Items
'Set objItem = GetCurrentItem()
StoreID = oFld.StoreID

For Each oItem In oItems
If InStr(1, oItem.Subject, ":", vbTextCompare) = 0 Then

If Len(oItem.Categories) 0 Then
Set objItem = oNS.GetItemFromID(oItem.EntryID, StoreID)

For Each objCategory In oNS.Categories
If InStr(1, objItem.Categories, objCategory.Name, vbTextCompare) 0 Then
Select Case objCategory.Color
Case OlCategoryColor.olCategoryColorDarkRed
objItem.Subject = "Roofing:" & objCategory.Name & " - " & objItem.Subject
objItem.Save
Case OlCategoryColor.olCategoryColorBlack
objItem.Subject = "Carpentry:" & objCategory.Name & " - " & objItem.Subject
objItem.Save
Case OlCategoryColor.olCategoryColorDarkGreen
objItem.Subject = "Job:" & objCategory.Name & " - " & objItem.Subject
objItem.Save
End Select
End If
Next
End If
objItem.Send
'Set objItem = Nothing
End If

Next

Exit Sub
OL_Error:
MsgBox Err.Description
Err.Clear
End Sub

Thanks in advance

Andy

Alan Moseley July 7th 09 10:40 AM

trap outbound mail to update subject
 
Hook into the Application.ItemSend event in the ThisOutlookSession code
window. It gets passed the email that is being sent so that you can
manipulate it:-

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim myItem As MailItem
If TypeName(Item) = "olMailItem" Then
Set myItem = Item
'Do something here such as call your routine passing the myItem object
End If
End Sub

I guess that your addin is already hooking into this event, so I am not sure
whether this would run before or after the addin, perhaps someone else can
advise.

--
Alan Moseley IT Consultancy
http://www.amitc.co.uk

If I have solved your problem, please click Yes below. Thanks.


"andy tomic" wrote:


Hi all

Getting a little stuck on my outbound rules / vba code. I currently
run an excellent addin called TAGLOCITY which tags emails with
categories. What I am trying to do PREFIX the mail subject based on
the category. NOTE: The taglocity addin triggers a category request
AFTER the item.send action.

for example;
I have a category "100 Love St" (this is my project name)
I have a color for all PROJECTS -- construction project are DARKGREEN
When I send the mail I want the addin to check the subject for a ":"
Then if there is no ":", prefix with "Job:" and the category.

I have the code for this and it works fine if i manually trigger the
vba code. I have a rule to hold the email in outbox for 1minute to
give the program time to modify and for me to go in and cancel the send
;) . My question is how can I trigger the code to work AFTER the
item.send command and there after the TAGLOCITY addin has had a chance
to add in the category.

code below:
Sub PrefixMailItemInOutbox()
Dim oNS As Outlook.NameSpace
Dim oFld As Outlook.Folder
Dim oItems As Outlook.Items
Dim oItem As Object
Dim Item As Outlook.MailItem

On Error GoTo OL_Error

Set oNS = Application.GetNamespace("MAPI")
Set oFld = oNS.GetDefaultFolder(olFolderOutbox)

Set oItems = oFld.Items
'Set objItem = GetCurrentItem()
StoreID = oFld.StoreID

For Each oItem In oItems
If InStr(1, oItem.Subject, ":", vbTextCompare) = 0 Then

If Len(oItem.Categories) 0 Then
Set objItem = oNS.GetItemFromID(oItem.EntryID, StoreID)

For Each objCategory In oNS.Categories
If InStr(1, objItem.Categories, objCategory.Name, vbTextCompare)
0 Then

Select Case objCategory.Color
Case OlCategoryColor.olCategoryColorDarkRed
objItem.Subject = "Roofing:" & objCategory.Name & " - "
& objItem.Subject
objItem.Save
Case OlCategoryColor.olCategoryColorBlack
objItem.Subject = "Carpentry:" & objCategory.Name & " -
" & objItem.Subject
objItem.Save
Case OlCategoryColor.olCategoryColorDarkGreen
objItem.Subject = "Job:" & objCategory.Name & " - " &
objItem.Subject
objItem.Save
End Select
End If
Next
End If
objItem.Send
'Set objItem = Nothing
End If

Next

Exit Sub
OL_Error:
MsgBox Err.Description
Err.Clear
End Sub

Thanks in advance

Andy




--
andy tomic


Ken Slovak - [MVP - Outlook] July 7th 09 02:12 PM

trap outbound mail to update subject
 
It's impossible to determine what addin will run things in what order. It
depends on the load order of the addins (Outlook VBA is just another COM
addin) and which ones register for which events in which order.

If that addin is actually hooking to Application.ItemSend() then it might be
after or before a VBA hook. If the VBA code must be after the addin massages
the data then using an earlier event such as item.Send() wouldn't help, but
many addins do use that event rather than Application.ItemSend() since that
fires after the email transport is engaged and so is too late for some item
manipulations.

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


"Alan Moseley" wrote in message
...
Hook into the Application.ItemSend event in the ThisOutlookSession code
window. It gets passed the email that is being sent so that you can
manipulate it:-

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim myItem As MailItem
If TypeName(Item) = "olMailItem" Then
Set myItem = Item
'Do something here such as call your routine passing the myItem
object
End If
End Sub

I guess that your addin is already hooking into this event, so I am not
sure
whether this would run before or after the addin, perhaps someone else can
advise.

--
Alan Moseley IT Consultancy
http://www.amitc.co.uk

If I have solved your problem, please click Yes below. Thanks.



andy tomic July 9th 09 06:52 PM

Thank you Alan and Ken.

The addin is definitely triggered after the Application.ItemSend event.

What I was thinking as a work around is to delay the message in the outbox for 1 min using a rule. Then manipulate the message with the code. My only shortfall is that I have not the knowledge to create a CUSTOM ACTION in the rules section.

Is there a simple way to call the procedure once the email gets into the outbox ??

Thanking you in advance

Andy

Ken Slovak - [MVP - Outlook] July 9th 09 11:35 PM

trap outbound mail to update subject
 
If you touch the item in the Outbox using code the send will be cancelled.

Application_ItemSend() will always fire, but sometimes it fires too late for
what you want to do, or some properties aren't changeable at that time.

If you want to handle things earlier, before the item gets to the Outbox
handle the Send() event on the item rather than the application-wide event.

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


"andy tomic" wrote in message
...

Thank you Alan and Ken.

The addin is definitely triggered after the Application.ItemSend event.


What I was thinking as a work around is to delay the message in the
outbox for 1 min using a rule. Then manipulate the message with the
code. My only shortfall is that I have not the knowledge to create a
CUSTOM ACTION in the rules section.

Is there a simple way to call the procedure once the email gets into
the outbox ??

Thanking you in advance

Andy




--
andy tomic



andy tomic July 15th 09 07:35 AM

Thanks Ken,

This is my problem. The Application_Send event fires TO EARLY. I need the PROPRIETARY addin to fire first, it sets the category for the mailitem. Then I can manipulate the subject based on the newly set category, and save and resend the mailitem.

Also, the form based send() event fires to early as well.

I basically need the code to run after the PROPRIETARY addin runs. The only way I have thought of is to put a 1min delay on the outbound mail rule and perform a custom action. Unfortunately my programming skills dont travel to the DLL world.

Any other ideas on how to accomplish this.

Thank you

Andy

Ken Slovak - [MVP - Outlook] July 15th 09 03:16 PM

trap outbound mail to update subject
 
I have no idea what proprietary addin you're talking about.

Application.ItemSend() is the last event you'd get on outgoing items, so if
that's too early for you then you need to rethink your architecture.

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


"andy tomic" wrote in message
...

Thanks Ken,

This is my problem. The Application_Send event fires TO EARLY. I need
the PROPRIETARY addin to fire first, it sets the category for the
mailitem. Then I can manipulate the subject based on the newly set
category, and save and resend the mailitem.

Also, the form based send() event fires to early as well.

I basically need the code to run after the PROPRIETARY addin runs. The
only way I have thought of is to put a 1min delay on the outbound mail
rule and perform a custom action. Unfortunately my programming skills
dont travel to the DLL world.

Any other ideas on how to accomplish this.

Thank you

Andy




--
andy tomic




All times are GMT +1. The time now is 12:52 AM.

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