2013-06-18 21 views
5

Potrafię pobierać wiadomości e-mail, przechodzić przez nie, oznaczać je jako przeczytane, a nawet sortować. Jednak gdy próbowałem ograniczyć przez ReceivedTime, wydaje się, że nie działa. Nie otrzymuję nic z powrotem bez względu na datę/godzinę, którą wstawiłem. Wiem, że ReceivedTime jest ważne na podstawie sortowania działa po usunięciu ograniczenia. Jakieś sugestie?Microsoft.Office.Interop.Outlook.Items.Restrict - nie działa poprawnie

Application app = new Application(); 
NameSpace outlookNs = app.GetNamespace("MAPI"); 

Microsoft.Office.Interop.Outlook.Folders folders = outlookNs.Folders[ohOptions.PSTName].Folders 
Microsoft.Office.Interop.Outlook.Items items = folders["Inbox"].Items; 

DateTime dt = DateTime.Now.Subtract(new TimeSpan(1,0,0)); 
items = items.Restrict("[ReceivedTime] > '" + dt.ToString("MM/dd/yyyy hh:mm:ss tt") + "'"); 

items.Sort("[ReceivedTime]", OlSortOrder.olAscending); 

foreach (MailItem item in items) 
{ 
    String from = item.SenderEmailAddress; 
} 

Odpowiedz

9

Wystąpił problem. Trwało to tylko trzy dni, ponieważ wydaje się, że nic nie mówi o formatowaniu dla tej daty/czasu. Wygląda na to, że nie lubi sekund ani godzin AM/PM. Wykorzystanie czasu militarnego i pozbycie się sekund pozwala mu działać poprawnie.

items = items.Restrict("[ReceivedTime] > '" + dt.ToString("MM/dd/yyyy HH:mm") + "'"); 
+1

Używanie tej dokładnej linii i to nie działa dla mnie. Szkoda, że ​​nie udokumentują tego lepiej, po prostu znalezienie formatu daty to taki ból. – Joe

+0

Ten artykuł po prostu używa DateTime.ToString ("g"), który również działa dla mnie. https://msdn.microsoft.com/en-us/library/office/gg619398.aspx –

0

Upewnij się, że aktualny format daty lokalizacji to naprawdę MM/dd/rrrr, a nie dd/MM/rrrr.

+0

Sprawdzone i nie jest problem. – Switch