![]() |
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
|
|||
|
|||
![]()
Hi all.
My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
Ads |
#3
|
|||
|
|||
![]()
So do you think CDO "Message.Delete" method does not delete (maybe forget to
delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#4
|
|||
|
|||
![]()
No, it does not delete the message id.
Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#5
|
|||
|
|||
![]()
Thank you MVP. I use your OutlookSpy and it's great!
I find the hidden message and find Outlook stores message ids (UIDL) getting from POP3 Server in the attachments of that hidden message. The names of attachments are Blobxxxxxxxx (8 x), Restagsxxxxxxxx (also 8 x), Deletedxxxxxxxx (also 8 x). There are 3 Blob files, 3 Restags files, and 3 Deleted files, because I have 3 POP3 accounts. Then I have some questions and need your help. 1. Since I have 3 POP3 accounts, how do I know which Blob, Restags, Deleted files belong to each of my account? 2. I know the UIDL id stores in Blob file. When I permanently delete a message, Outlook add its UIDL to Deleted file. I think when logons to POP3 server next time, Outlook will read Deleted file and send DELE command to POP3 server. If my COM Add-in could add UIDL to Deleted file (in the hidden message) when permanently deleted a message, Outlook would send DELE command to POP3 server and delete copy of the message. The first thing I have to do is get UIDL. I cannot find where UIDL was stored. Is there any relation between EntryID and UIDL? It's easy to get EntryID. You are an excellent expert in this area and and I believe you can find a good way. And I really really really need your help. :-) Thank you so much! "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#6
|
|||
|
|||
![]()
Now I find the place where the message stores the UIDL message ids.
Using OutlookSpy, selete a message, then click IMessage button. In "Property Tag" list of "GetProps" tab, 0x8016 (|ID=0x8f01) is UIDL message ids. The BINARY value can be parsed to "POP://xxxxxxxx". I use CDO and OOM and have not used MAPI yet. Do you think using MAPI is the only way to get this value? Could you give me some example of using MAPI? I googled and found your another article which said to add these lines: #define INITGUID #include objbase.h #define USES_IID_IMessage #include mapix.h #include mapitags.h #include mapidefs.h #include mapiutil.h #include mapiguid.h These are codes in my program: CComPtr IUnknown spUnknown; CComPtr IMessage spIMessage; spNewMail-get_MAPIOBJECT(&spUnknown); // point to a message spUnknown-QueryInterface(IID_IMessage, (void **)&spIMessage); I get two link errors: error LNK2001: unresolved external symbol _IID_IMessage fatal error LNK1120: 1 unresolved externals Could you tell me how to resolve it? Thank you. :-) "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#7
|
|||
|
|||
![]()
I've written this and it works:
CComPtr IUnknown spUnknown; CComPtr IMessage spIMessage; spNewMail-get_MAPIOBJECT(&spUnknown); spUnknown-QueryInterface(IID_IMessage, (void **)&spIMessage); SPropTagArray Array; LPSPropTagArray lpArray = &Array; lpArray-cValues = 1; lpArray-aulPropTag[0] = 0x80160102; ULONG FAR lpcValues; LPSPropValue lppPropArray; HRESULT hr = spIMessage-GetProps(lpArray, NULL, &lpcValues, &lppPropArray); int nStrCount = lppPropArray-Value.bin.cb; _bstr_t bstrPOPString((wchar_t *)lppPropArray-Value.bin.lpb); char * cPOPString = bstrPOPString; ATLTRACE("POPSTRING = %s\n", cPOPString); I do not forget to free them like this: MAPIFreeBuffer((void *)lpcValues); MAPIFreeBuffer(lppPropArray); The UIDL message id have been stored in bstrPOPString. The next step is to add it to the corresponding attachment of hidden message. I don't know how to find the exact attachment because I have 3 "Deletedxxxxxxxx" files. I cannot get its property tag like PR_XXXXXX style because it has no name in MAPITAGS.H file. Instead, I use 0x80160102 directly. Do you think its property tag is different in other computers installed Outlook 2003? Thank you. "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an Email in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#8
|
|||
|
|||
![]()
You cannot hardcode the property tag; it is a named property, you must call
IMessage::GetIDsFromNames first. I don't know how those messages are mapped to the accounts, sorry. Did you try to see if anything is available through the IOlkAccountManager (you can access it through Misc | IOlkAccountManager in OutlookSpy)? Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... I've written this and it works: CComPtr IUnknown spUnknown; CComPtr IMessage spIMessage; spNewMail-get_MAPIOBJECT(&spUnknown); spUnknown-QueryInterface(IID_IMessage, (void **)&spIMessage); SPropTagArray Array; LPSPropTagArray lpArray = &Array; lpArray-cValues = 1; lpArray-aulPropTag[0] = 0x80160102; ULONG FAR lpcValues; LPSPropValue lppPropArray; HRESULT hr = spIMessage-GetProps(lpArray, NULL, &lpcValues, &lppPropArray); int nStrCount = lppPropArray-Value.bin.cb; _bstr_t bstrPOPString((wchar_t *)lppPropArray-Value.bin.lpb); char * cPOPString = bstrPOPString; ATLTRACE("POPSTRING = %s\n", cPOPString); I do not forget to free them like this: MAPIFreeBuffer((void *)lpcValues); MAPIFreeBuffer(lppPropArray); The UIDL message id have been stored in bstrPOPString. The next step is to add it to the corresponding attachment of hidden message. I don't know how to find the exact attachment because I have 3 "Deletedxxxxxxxx" files. I cannot get its property tag like PR_XXXXXX style because it has no name in MAPITAGS.H file. Instead, I use 0x80160102 directly. Do you think its property tag is different in other computers installed Outlook 2003? Thank you. "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#9
|
|||
|
|||
![]()
I have got the whole relations of UIDL message id, attachment file name of
the hidden message, and POP Account ID! And I have got the values in my program. Thanks for your great OutlookSpy! Select a message -- IMessage -- GetProps -- Property Tag == 0x8013 The first 8 number of 0x8013 value is POP Account ID. It's HEX and must be changed to DEC. In the same window, the value whose Property Tag is equle to "0x8016 (|ID=0x8f01)" is the UIDL message id. Misc -- IOlkAccountManager PROP_ACCT_ID is the POP Account ID got from IMessage. Misc -- IOlkAccountManager -- select an account and click "FindAccount" The pVar of dwProp whose value is equal to "PT_LONG, 0x0003" is the attachment file ID of the hidden file. For example, my value is "2192694955". When changed to HEX, it will be "82b1deab". So the attachment file names of hidden message in Inbox are "Blob82b1deab", "Restags82b1deab" and "Deleted82b1deab". What I have to do now is to add the UIDL message id to the attachment file whose name is "Deleted82b1deab". Could you tell me how to add something in an attachment using CDO? Thank you and have a good day! :-) "Dmitry Streblechenko" wrote: You cannot hardcode the property tag; it is a named property, you must call IMessage::GetIDsFromNames first. I don't know how those messages are mapped to the accounts, sorry. Did you try to see if anything is available through the IOlkAccountManager (you can access it through Misc | IOlkAccountManager in OutlookSpy)? Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... I've written this and it works: CComPtr IUnknown spUnknown; CComPtr IMessage spIMessage; spNewMail-get_MAPIOBJECT(&spUnknown); spUnknown-QueryInterface(IID_IMessage, (void **)&spIMessage); SPropTagArray Array; LPSPropTagArray lpArray = &Array; lpArray-cValues = 1; lpArray-aulPropTag[0] = 0x80160102; ULONG FAR lpcValues; LPSPropValue lppPropArray; HRESULT hr = spIMessage-GetProps(lpArray, NULL, &lpcValues, &lppPropArray); int nStrCount = lppPropArray-Value.bin.cb; _bstr_t bstrPOPString((wchar_t *)lppPropArray-Value.bin.lpb); char * cPOPString = bstrPOPString; ATLTRACE("POPSTRING = %s\n", cPOPString); I do not forget to free them like this: MAPIFreeBuffer((void *)lpcValues); MAPIFreeBuffer(lppPropArray); The UIDL message id have been stored in bstrPOPString. The next step is to add it to the corresponding attachment of hidden message. I don't know how to find the exact attachment because I have 3 "Deletedxxxxxxxx" files. I cannot get its property tag like PR_XXXXXX style because it has no name in MAPITAGS.H file. Instead, I use 0x80160102 directly. Do you think its property tag is different in other computers installed Outlook 2003? Thank you. "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
#10
|
|||
|
|||
![]()
CDO does nott allow to modify the attachment data directly, so you wowuld
need to save the attachment as a file, modify it, delete the old attachment, add the new one. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... I have got the whole relations of UIDL message id, attachment file name of the hidden message, and POP Account ID! And I have got the values in my program. Thanks for your great OutlookSpy! Select a message -- IMessage -- GetProps -- Property Tag == 0x8013 The first 8 number of 0x8013 value is POP Account ID. It's HEX and must be changed to DEC. In the same window, the value whose Property Tag is equle to "0x8016 (|ID=0x8f01)" is the UIDL message id. Misc -- IOlkAccountManager PROP_ACCT_ID is the POP Account ID got from IMessage. Misc -- IOlkAccountManager -- select an account and click "FindAccount" The pVar of dwProp whose value is equal to "PT_LONG, 0x0003" is the attachment file ID of the hidden file. For example, my value is "2192694955". When changed to HEX, it will be "82b1deab". So the attachment file names of hidden message in Inbox are "Blob82b1deab", "Restags82b1deab" and "Deleted82b1deab". What I have to do now is to add the UIDL message id to the attachment file whose name is "Deleted82b1deab". Could you tell me how to add something in an attachment using CDO? Thank you and have a good day! :-) "Dmitry Streblechenko" wrote: You cannot hardcode the property tag; it is a named property, you must call IMessage::GetIDsFromNames first. I don't know how those messages are mapped to the accounts, sorry. Did you try to see if anything is available through the IOlkAccountManager (you can access it through Misc | IOlkAccountManager in OutlookSpy)? Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... I've written this and it works: CComPtr IUnknown spUnknown; CComPtr IMessage spIMessage; spNewMail-get_MAPIOBJECT(&spUnknown); spUnknown-QueryInterface(IID_IMessage, (void **)&spIMessage); SPropTagArray Array; LPSPropTagArray lpArray = &Array; lpArray-cValues = 1; lpArray-aulPropTag[0] = 0x80160102; ULONG FAR lpcValues; LPSPropValue lppPropArray; HRESULT hr = spIMessage-GetProps(lpArray, NULL, &lpcValues, &lppPropArray); int nStrCount = lppPropArray-Value.bin.cb; _bstr_t bstrPOPString((wchar_t *)lppPropArray-Value.bin.lpb); char * cPOPString = bstrPOPString; ATLTRACE("POPSTRING = %s\n", cPOPString); I do not forget to free them like this: MAPIFreeBuffer((void *)lpcValues); MAPIFreeBuffer(lppPropArray); The UIDL message id have been stored in bstrPOPString. The next step is to add it to the corresponding attachment of hidden message. I don't know how to find the exact attachment because I have 3 "Deletedxxxxxxxx" files. I cannot get its property tag like PR_XXXXXX style because it has no name in MAPITAGS.H file. Instead, I use 0x80160102 directly. Do you think its property tag is different in other computers installed Outlook 2003? Thank you. "Dmitry Streblechenko" wrote: No, it does not delete the message id. Yes, you can access the list of message ids. If you are using CDO 1.21, use the Folder.HiddenMessages to find the corresponding message. Look at the hidden messages with OutlookSpy (click IMAPIFolder, go to the "Associated Contents" tab) or MFCMAPI. I don't see however how that will help you - if you delete that message id, POP3 provider will assume that it is a new message and download it again. This is the opposite of what you are trying to achieve. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" wrote in message ... So do you think CDO "Message.Delete" method does not delete (maybe forget to delete) message ids in that hidden message? If this is true, can my add-in access that hidden message in the Inbox and delete ids? Thank you. "Dmitry Streblechenko" wrote: Outlook stores the list of the message ids in a hidden message (PR_MESSAGE_CLASS = "IPM.MessageManager") in the Inbox. However there is no way to tell the POP3 provider in Outlook to delete a particular message from a POP3 server. Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool "Rui Feng" Rui wrote in message ... Hi all. My Outlook 2003 retrieves emails from a POP3 server. I set to "Leave a copy of messages on the server" and "Remove from server when deleted from 'Deleted Items'". I wrote a COM Add-in using VC++ 6.0 When recieved a new mail from certain sender, I can catch the ItemAdd event and use CDO Message-Delete() to permanently delete that new email. But the email has not been deleted from the POP3 server. I guess there is a looking-up table in Outlook. When I delete an in "Deleted Items Folder", Outlook find ID of that email and set a value. It uses that value to notify the POP3 server next time to delete corresponding with the same ID on the server. I think maybe CDO doesn't tell Outlook that "an email was deleted and please tell POP3 Server to delete the copy when connected next time". Is that true and how to solve it? If you can do it using other programming language like VB please tell me anyway. Thank you. :-) -------- Beijing, China |
|
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Stop pop3 e-mail from downloading over again & leave server copy | tberger | Outlook - Installation | 3 | August 17th 06 05:39 PM |
Leave messages on server (pop3) | losl(removethis) | Outlook Express | 1 | August 9th 06 03:47 AM |
keep a copy of messages on server | Nina | Outlook - Installation | 0 | May 31st 06 11:50 AM |
Messages sent using CDO arriving as text | Danila | Outlook and VBA | 0 | May 15th 06 05:26 PM |
Macro to selectively delete message from POP3 server | alainr | Outlook and VBA | 3 | January 20th 06 01:42 PM |