2012-08-26 39 views
4

在Outlook 2010的插件,我想找到一個給定的電子郵件地址發送一個文件夾中的項目:查找電子郵件 - 過濾器語法

MailItem FindEmailFromSender(MAPIFolder folder, string emailAddress) 
{ 
    string filter = "[sender] = '" + emailAddress + "'"; // This filter is wrong. 
    return folder.Items.Find(filter) as MailItem; 
} 

看起來這應該是超級容易,但我無法找到正確的語法。發件人電子郵件地址過濾的正確過濾器語法是什麼?

+0

也許屬性名稱區分大小寫。你用'[發件人]'試過了嗎? – nemesv

+1

基於MailItem'文檔,您可能正在尋找屬性'[SenderEmailAddress]'... – nemesv

+0

@nemesv - '[SenderEmailAddress]'有訣竅。你能否將你的評論添加爲答案,以便我可以接受它? – gilly3

回答

2

基礎上MailItem documentation你需要使用

[SenderEmailAddress]發件人的電子郵件地址

[SenderName]發件人的顯示名稱

你也應該請注意屬性名稱區分大小寫。

1

您可能正在尋找電子郵件帳戶屬性過濾器。這個例子爲我工作...

string filter = "[E-mail Account] = '" + emailAddress + "'"; // filters on exact address 
return folder.Items.Find(filter) as MailItem; 

如果要通過發件人名稱進行搜索,您可以使用:使用高級查找

string filter = "[From] = '" + senderName + "'"; // filters on exact sender name "Bob Johns" 
return folder.Items.Find(filter) as MailItem; 

另見MSDN for item filtering referenceMSDN blog post describing how to find DASL property names

+0

不,'[電子郵件帳戶]'不起作用。我用'[From]'得到了不同的結果,它只能處理一封郵件,而不能處理另一封郵件。 '[SenderEmailAddress]'似乎工作。 – gilly3

1

感謝nemesv的answer above。在另一個問題上,由於this answer,「我代表」另一個帳戶發送電子郵件時,我還設法弄清楚如何找到發件人地址。我在這裏包括它的完整性:

MailItem FindEmailSentOnBehalfSender(MAPIFolder folder, string emailAddress) 
{ 
    string filter = "@SQL=\"http://schemas.microsoft.com/mapi/proptag/0x0065001F\" = '{0}'"; 
    return folder.Items.Find(string.Format(filter, emailAddress)) as MailItem; 
}