![]() |
If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
![]()
Ken
Thanks for the response. I now understand the Entry ID part but have some issues with the real code implementation: 1. I looked for cancelling the Send event on the original email. Cant seem to find any code. Can you please point this to me. I am really having a hard time finding this. Also I see this - myItem.SavveSentMessageFolder -- which i believe i can use to save the email directly into the sent message folder. This may avoid the MyItem.Save and then moving? What do you suggest. Thanks |
#2
|
|||
|
|||
![]()
There are 2 possibilities for canceling a send. The first event is
item.Send, which fires initially when the user clicks send. That event is on the MailItem and fires only in that item. The second event is the Application.ItemSend event, which is an application-wide event. In either event all you do is set Cancel = true to cancel the send operation. SaveSentMessageFolder takes a MAPIFolder as an argument and provides a way of setting that one specific item to save in your folder of choice. The property is only used after the after is sent out, so it's of no use when cancelling a send. You could set that property to Drafts, My Old Outgoing Mail, Sent Items, or wherever else you want. DeleteAfterSubmit is a Boolean property that when set will delete the sent item after it's sent out and leave no copies behind. -- 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 "PS" wrote in message ups.com... Ken Thanks for the response. I now understand the Entry ID part but have some issues with the real code implementation: 1. I looked for cancelling the Send event on the original email. Cant seem to find any code. Can you please point this to me. I am really having a hard time finding this. Also I see this - myItem.SavveSentMessageFolder -- which i believe i can use to save the email directly into the sent message folder. This may avoid the MyItem.Save and then moving? What do you suggest. Thanks |
#3
|
|||
|
|||
![]()
Ken
Thanks for the really quick response. I am actually doing that - setting cancel = true (in MailItem_Send event) and that works fine. I was thinking the implementation was something different. Beucase when i do that - that ofcourse stops the email from going out - but the actual email stays open. Reading back your first post - it means that after doing that (cancel=true) I need to call the MyItem.Save first (which I believe will save it in inbox) and then MyItem.Close or something similar (do i need to call that because i belive the save only saves the email but does not close it) Does that approach sound right? Thanks a lot once again. really helping me |
#4
|
|||
|
|||
![]()
That's correct. You most likely will be best off in setting a timer to go
off maybe 1/2 second or so after you exit the item.Send event and then in the timer event call item.Close. So the sequence would be: In Item.Send: Save item Get item EntryID Cancel Save event Set timer In timer event: Close the item Now at that point the item is closed so you need to find a way to get at it to move it or whatever. So in the timer event set a flag to true to indicate that the item was closed by you. Then in the close event set up an array of the item EntryID and StoreID (item.Parent.StoreID) and set another timer to fire later on. Release all of your objects so the object is completely uninstantiated. In the later timer event read the global array or collection or whatever and get the item and move it where you want or do whatever with it. -- 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 "PS" wrote in message ups.com... Ken Thanks for the really quick response. I am actually doing that - setting cancel = true (in MailItem_Send event) and that works fine. I was thinking the implementation was something different. Beucase when i do that - that ofcourse stops the email from going out - but the actual email stays open. Reading back your first post - it means that after doing that (cancel=true) I need to call the MyItem.Save first (which I believe will save it in inbox) and then MyItem.Close or something similar (do i need to call that because i belive the save only saves the email but does not close it) Does that approach sound right? Thanks a lot once again. really helping me |
#5
|
|||
|
|||
![]()
Ken
I was implementing the above discussed content and am getting an error (which I believe shouldnt be the case) when working with the Mail Close logic In the MailItem_Send event as discussed - after setting Cancel = true - in the end I start a timer event which lets say gets called after 3 seconds But still get this error on Marshal.FinalReleaseComObject(myMailItem);: Error Text: RaceOnRCWCleanup was detected Message: An attempt has been made to free an RCW that is in use. The RCW is in use on the active thread or another thread. Attempting to free an in-use RCW can cause corruption or data loss. Code he private void MailItem_ItemSend(ref bool Cancel) { Business Logic here.. If certain business condition is true then. Cancel = true Then Timer Logic (which is below) Timer delay = new Timer(); delay.Enabled = true; delay.Interval = 10000; delay.Tick += new EventHandler(delay_Tick); } void delay_Tick(object sender, EventArgs e) { myMailItem.Close(Ol.OlInspectorClose.olSave); Or Even tried below: myMailItem.Delete(); } private void MailItem_ItemClose(ref bool Cancel) { try { //Execute cleanup only if the item has not changed, b'coz the message box prompts users to save the message is displayed //after this event. That message box also gives the user the ability to cancel the event //so we do not want to unwire the events here if the message is "dirty" if (this.isSent || myMailItem.Saved) { CleanMailItemEvents(); //Some more cleannup } } } public void CleanMailItemEvents() { Ol.ItemEvents_10_Event _myMailItemEvents = myMailItem as Ol.ItemEvents_10_Event; _myMailItemEvents.Close -= new Ol.ItemEvents_10_CloseEventHandler(MailItem_ItemCl ose); _myMailItemEvents.Send -= new Ol.ItemEvents_10_SendEventHandler(MailItem_ItemSen d); _myMailItemEvents.Forward -= new Ol.ItemEvents_10_ForwardEventHandler(MailItem_Item Forward); _myMailItemEvents.Reply -= new Ol.ItemEvents_10_ReplyEventHandler(MailItem_ItemFo rward); _myMailItemEvents.ReplyAll -= new Ol.ItemEvents_10_ReplyAllEventHandler(MailItem_Ite mRelpyAll); _myMailItemEvents = null; Marshal.FinalReleaseComObject(myMailItem); myMailItem = null; } |
#6
|
|||
|
|||
![]()
See if Marshal.ReleaseComObject works any better. If not think about not
calling that function at all. -- 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 "PS" wrote in message oups.com... Ken I was implementing the above discussed content and am getting an error (which I believe shouldnt be the case) when working with the Mail Close logic In the MailItem_Send event as discussed - after setting Cancel = true - in the end I start a timer event which lets say gets called after 3 seconds But still get this error on Marshal.FinalReleaseComObject(myMailItem);: Error Text: RaceOnRCWCleanup was detected Message: An attempt has been made to free an RCW that is in use. The RCW is in use on the active thread or another thread. Attempting to free an in-use RCW can cause corruption or data loss. Code he private void MailItem_ItemSend(ref bool Cancel) { Business Logic here.. If certain business condition is true then. Cancel = true Then Timer Logic (which is below) Timer delay = new Timer(); delay.Enabled = true; delay.Interval = 10000; delay.Tick += new EventHandler(delay_Tick); } void delay_Tick(object sender, EventArgs e) { myMailItem.Close(Ol.OlInspectorClose.olSave); Or Even tried below: myMailItem.Delete(); } private void MailItem_ItemClose(ref bool Cancel) { try { //Execute cleanup only if the item has not changed, b'coz the message box prompts users to save the message is displayed //after this event. That message box also gives the user the ability to cancel the event //so we do not want to unwire the events here if the message is "dirty" if (this.isSent || myMailItem.Saved) { CleanMailItemEvents(); //Some more cleannup } } } public void CleanMailItemEvents() { Ol.ItemEvents_10_Event _myMailItemEvents = myMailItem as Ol.ItemEvents_10_Event; _myMailItemEvents.Close -= new Ol.ItemEvents_10_CloseEventHandler(MailItem_ItemCl ose); _myMailItemEvents.Send -= new Ol.ItemEvents_10_SendEventHandler(MailItem_ItemSen d); _myMailItemEvents.Forward -= new Ol.ItemEvents_10_ForwardEventHandler(MailItem_Item Forward); _myMailItemEvents.Reply -= new Ol.ItemEvents_10_ReplyEventHandler(MailItem_ItemFo rward); _myMailItemEvents.ReplyAll -= new Ol.ItemEvents_10_ReplyAllEventHandler(MailItem_Ite mRelpyAll); _myMailItemEvents = null; Marshal.FinalReleaseComObject(myMailItem); myMailItem = null; } |
#7
|
|||
|
|||
![]()
Ken
Sorry for the late reply on this. I actually was able to do a Move on the email - when in the Item send method and that actually worked (once i supply the folder name). That moves the email and also closes the original after the move. This saves the effort of maintaining those variables in global in the close event. Thanks Pratik |
#8
|
|||
|
|||
![]()
I looked into this more all of last night - but cant seem to find
(sorry for my ignorance) - how to stop/cancel the send event of an email and then close it properly. Even if it stays in inblx it is fine because using the .Move method is very easy or as I mentioned myItem.SavveSentMessageFolder possibly. But please Ken - can you please point me how to do that Thanks |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Hot to speed up MailItems access | Ivan | Add-ins for Outlook | 8 | June 27th 07 06:39 PM |
Move MailItems to another folder | Gvaram | Outlook and VBA | 5 | June 25th 07 01:46 PM |
Could not save item. the form required to view this message cannot | matt hullinger | Outlook - Calandaring | 1 | February 20th 07 11:48 PM |
Can someone point me in the right direction configuring Outlook To | Sam | Outlook - Installation | 0 | June 8th 06 03:25 AM |
How To: select mailitems from my inbox? | NFR | Outlook - Using Forms | 1 | May 16th 06 04:41 PM |