![]() |
MailItem Find Method question
Using the Find method to find a Subject, I have a couple of questions.
If the Subject is "Test", the following code finds the email. If the subject is " Test", it does not. I have to remove the prefix. Why is that? If the subject is null, my code doesn't find the email. I figure someone can send an email without a subject. Any idea on correcting it? If Not IsNull(strSubject) Then Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _ strSubject & """") Else Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null") End If I have a question on finding the email by date as well. I pass a date field to the function. It converts the date time to a string then searches. Out of 10 email times passed to it, if found only 1. Any idea whay the code below fails the majority of the time? strTime = Format(datTime, "m/d/yyyy h:nn AMPM") Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """ & strTime & """") |
MailItem Find Method question
If strSubject is declared as a String type, it never will be Null. Instead use IsEmpty, or even better just: If str="" then... Actually you'd need the LIKE operator in the filter, but that's not supported. So you'd have to loop through all the collection, and check each item with If item.subject like "*whatever*" Then ... More flexible, and a lot faster, are the Restriction* objects from the Redemption (www.dimastr.com) -- Best regards Michael Bauer - MVP Outlook Manage and share your categories: http://www.vboffice.net/product.html?pub=6&lang=en Am Sun, 21 Feb 2010 15:28:08 -0800 schrieb Salad: Using the Find method to find a Subject, I have a couple of questions. If the Subject is "Test", the following code finds the email. If the subject is " Test", it does not. I have to remove the prefix. Why is that? If the subject is null, my code doesn't find the email. I figure someone can send an email without a subject. Any idea on correcting it? If Not IsNull(strSubject) Then Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _ strSubject & """") Else Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null") End If I have a question on finding the email by date as well. I pass a date field to the function. It converts the date time to a string then searches. Out of 10 email times passed to it, if found only 1. Any idea whay the code below fails the majority of the time? strTime = Format(datTime, "m/d/yyyy h:nn AMPM") Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """ & strTime & """") |
MailItem Find Method question
Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which does
not include the prefix), not PR_SUBJECT. Where does the strSubject come from? Do you actually store it? Or does the user type it? -- Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool - "Salad" wrote in message ... Using the Find method to find a Subject, I have a couple of questions. If the Subject is "Test", the following code finds the email. If the subject is " Test", it does not. I have to remove the prefix. Why is that? If the subject is null, my code doesn't find the email. I figure someone can send an email without a subject. Any idea on correcting it? If Not IsNull(strSubject) Then Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _ strSubject & """") Else Set objMail = _ objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null") End If I have a question on finding the email by date as well. I pass a date field to the function. It converts the date time to a string then searches. Out of 10 email times passed to it, if found only 1. Any idea whay the code below fails the majority of the time? strTime = Format(datTime, "m/d/yyyy h:nn AMPM") Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """ & strTime & """") |
MailItem Find Method question
Dmitry Streblechenko wrote:
Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which does not include the prefix), not PR_SUBJECT. Where does the strSubject come from? Do you actually store it? Or does the user type it? In Access, one can do a File/Import/GetExternalData and link an inbox, sent, etc folder and it's now a table, similar to an Excel spreadsheet. So I'm using info from the inbox in my testing. One of the fields is "Subject" that contains the entire subject line " Test". Another field is "Subject Prefix" with just the "", and "Normalized Subject" that contains "Test" Besides the subject fields , there's also the received/created/lastmodified columns, the email size, sender name, and a few other fields like the body. I thought it'd be relatively simple to find the email. Works like a champ on the normalized subject as you noted. I can'r find the email if the subject line is null. I can't find the email based on any datetime stamp. Works like a champ on message size. But I figure there can be one or more emails with the same subject line, same message size, or same datetimestamp. But all three? I don't think so. Since the .Find method works fine on the subject and size fields, I'm obviously passing the wrong filter for a null (blank) subject and for the date. I've tried, and failed on .Find("IsEmpty([Subject]") .Find("IsNull([Subject]") .Find("[Subject] = ''") and for dates 'Set objMail = .Find("[ReceivedTime]= '1/1/2010 3:34:00 AM'") and Jan 1, 2010, January 1,2010, no seconds, no AM, just the date, nothing works. Single quotes, double quotes, it doesn't seem to matter. Based on the above, do you spot anything obvious that is in error? Or other tests I could make? Or a link to compare my code to for finding an email? |
MailItem Find Method question
Searching by subject is a bad idea, to put it mildly :-) What happens if you
have multiple messsages with the same subject? Use the EntryID property and open the item using using Application.Session.GetItemFromID. There is no reason to search. -- Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool - "Salad" wrote in message m... Dmitry Streblechenko wrote: Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which does not include the prefix), not PR_SUBJECT. Where does the strSubject come from? Do you actually store it? Or does the user type it? In Access, one can do a File/Import/GetExternalData and link an inbox, sent, etc folder and it's now a table, similar to an Excel spreadsheet. So I'm using info from the inbox in my testing. One of the fields is "Subject" that contains the entire subject line " Test". Another field is "Subject Prefix" with just the "", and "Normalized Subject" that contains "Test" Besides the subject fields , there's also the received/created/lastmodified columns, the email size, sender name, and a few other fields like the body. I thought it'd be relatively simple to find the email. Works like a champ on the normalized subject as you noted. I can'r find the email if the subject line is null. I can't find the email based on any datetime stamp. Works like a champ on message size. But I figure there can be one or more emails with the same subject line, same message size, or same datetimestamp. But all three? I don't think so. Since the .Find method works fine on the subject and size fields, I'm obviously passing the wrong filter for a null (blank) subject and for the date. I've tried, and failed on .Find("IsEmpty([Subject]") .Find("IsNull([Subject]") .Find("[Subject] = ''") and for dates 'Set objMail = .Find("[ReceivedTime]= '1/1/2010 3:34:00 AM'") and Jan 1, 2010, January 1,2010, no seconds, no AM, just the date, nothing works. Single quotes, double quotes, it doesn't seem to matter. Based on the above, do you spot anything obvious that is in error? Or other tests I could make? Or a link to compare my code to for finding an email? |
MailItem Find Method question
Dmitry Streblechenko wrote:
Searching by subject is a bad idea, to put it mildly :-) What happens if you have multiple messsages with the same subject? Use the EntryID property and open the item using using Application.Session.GetItemFromID. There is no reason to search. Wouldn't you know, EntryID is not one of the columns in the table tha is created in Access if one links a folder. Well, MS gave us/me the partial information, but not all unfortunately. The table lets one know if there are attachments or not, but not the attachment names nor as it appears an easy way to find the email. Thus I'd need a way to find the email if it had attachments. |
MailItem Find Method question
If you cannot get entry id as one of the columns, don't use
File/Import/GetExternalData. -- Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO and MAPI Developer Tool - "Salad" wrote in message m... Dmitry Streblechenko wrote: Searching by subject is a bad idea, to put it mildly :-) What happens if you have multiple messsages with the same subject? Use the EntryID property and open the item using using Application.Session.GetItemFromID. There is no reason to search. Wouldn't you know, EntryID is not one of the columns in the table tha is created in Access if one links a folder. Well, MS gave us/me the partial information, but not all unfortunately. The table lets one know if there are attachments or not, but not the attachment names nor as it appears an easy way to find the email. Thus I'd need a way to find the email if it had attachments. |
All times are GMT +1. The time now is 10:44 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