如何获取与会议请求关联的帐户?
How can I get the account associated to a meeting request?
我需要知道与会议请求关联的帐户电子邮件地址(会议请求发送到的电子邮件地址):
string GetAssociatedAccountEmailAddress(Outlook.MeetingItem meetingItem)
{
//TODO: implement this method:
throw new NotImplementedException();
}
这是我试过的:
string GetAssociatedAccountEmailAddress1(Outlook.MeetingItem meetingItem)
{
Outlook.MAPIFolder folder = meetingItem.Parent;
Debug.WriteLine("Folder Name: {0}, Folder Path: {1}", folder.Name, folder.FolderPath);
Outlook.MAPIFolder folderParent = folder.Parent;
Debug.WriteLine("Folder Parent Name: {0}, Folder Parent Path: {1}", folderParent.Name, folderParent.FolderPath);
return folderParent.FolderPath.Replace("\", "");
}
调试输出:
Folder Name: Inbox, Folder Path: \\foo@foo.com\Inbox
Folder Parent Name: foo@foo.com, Folder Parent Path: \\foo@foo.com
此实现的问题是我不确定文件夹路径是否始终包含电子邮件地址。
我还尝试了以下方法:
string GetAssociatedAccountEmailAddress2(Outlook.MeetingItem meetingItem)
{
Outlook.MAPIFolder folder = meetingItem.Parent;
Outlook.MAPIFolder folderParent = folder.Parent;
Outlook.NameSpace ns = folderParent.Parent;
return ns.Accounts.Cast<Outlook.Account>()
.FirstOrDefault(x => meetingItem.Recipients.Cast<Outlook.Recipient>().Any(r => r.Address == x.SmtpAddress))
.SmtpAddress;
}
这个问题是,如果我有两个帐户(foo@foo.com 和 bar@bar.com)并且会议请求被发送到这两个帐户,那么我有两个会议请求但是 GetAssociatedAccountEmailAddress2
returns 相同的电子邮件地址。
仅供参考:我正在使用 VS 2015 为 Outlook 2013 开发 Outlook add-in。
有几种方法可以做到这一点 -
使用MeetingItem.PropertyAccessor.GetProperty
读取PR_RECEIVED_BY_ENTRYID
属性(不保证存在,DASL名称http://schemas.microsoft.com/mapi/proptag/0x003F0102
),将其转换为十六进制字符串使用 PropertyAccessor.BinaryToString
,用它来调用 Application.Session.GetAddressEntryFromID
。请注意,如果商品是从另一家商店复制的,属性 可能与实际商店所有者不匹配。查看带有 OutlookSpy 的会议请求(我是它的 authot)- 单击 IMessage 按钮以查看 属性.
使用 [=18] 从 parent 商店 (MeetingItem.Parent.Store
) 读取 PR_MAILBOX_OWNER_ENTRYID
属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x661B0102
) =].不保证 属性 存在。如果使用 Redemption (I am also its author) is an option, it exposes the RDOExchangeMailboxStore object that has the Owner
property (returns RDOAddressEntry object).
我需要知道与会议请求关联的帐户电子邮件地址(会议请求发送到的电子邮件地址):
string GetAssociatedAccountEmailAddress(Outlook.MeetingItem meetingItem)
{
//TODO: implement this method:
throw new NotImplementedException();
}
这是我试过的:
string GetAssociatedAccountEmailAddress1(Outlook.MeetingItem meetingItem)
{
Outlook.MAPIFolder folder = meetingItem.Parent;
Debug.WriteLine("Folder Name: {0}, Folder Path: {1}", folder.Name, folder.FolderPath);
Outlook.MAPIFolder folderParent = folder.Parent;
Debug.WriteLine("Folder Parent Name: {0}, Folder Parent Path: {1}", folderParent.Name, folderParent.FolderPath);
return folderParent.FolderPath.Replace("\", "");
}
调试输出:
Folder Name: Inbox, Folder Path: \\foo@foo.com\Inbox
Folder Parent Name: foo@foo.com, Folder Parent Path: \\foo@foo.com
此实现的问题是我不确定文件夹路径是否始终包含电子邮件地址。
我还尝试了以下方法:
string GetAssociatedAccountEmailAddress2(Outlook.MeetingItem meetingItem)
{
Outlook.MAPIFolder folder = meetingItem.Parent;
Outlook.MAPIFolder folderParent = folder.Parent;
Outlook.NameSpace ns = folderParent.Parent;
return ns.Accounts.Cast<Outlook.Account>()
.FirstOrDefault(x => meetingItem.Recipients.Cast<Outlook.Recipient>().Any(r => r.Address == x.SmtpAddress))
.SmtpAddress;
}
这个问题是,如果我有两个帐户(foo@foo.com 和 bar@bar.com)并且会议请求被发送到这两个帐户,那么我有两个会议请求但是 GetAssociatedAccountEmailAddress2
returns 相同的电子邮件地址。
仅供参考:我正在使用 VS 2015 为 Outlook 2013 开发 Outlook add-in。
有几种方法可以做到这一点 -
使用
MeetingItem.PropertyAccessor.GetProperty
读取PR_RECEIVED_BY_ENTRYID
属性(不保证存在,DASL名称http://schemas.microsoft.com/mapi/proptag/0x003F0102
),将其转换为十六进制字符串使用PropertyAccessor.BinaryToString
,用它来调用Application.Session.GetAddressEntryFromID
。请注意,如果商品是从另一家商店复制的,属性 可能与实际商店所有者不匹配。查看带有 OutlookSpy 的会议请求(我是它的 authot)- 单击 IMessage 按钮以查看 属性.使用 [=18] 从 parent 商店 (
MeetingItem.Parent.Store
) 读取PR_MAILBOX_OWNER_ENTRYID
属性(DASL 名称http://schemas.microsoft.com/mapi/proptag/0x661B0102
) =].不保证 属性 存在。如果使用 Redemption (I am also its author) is an option, it exposes the RDOExchangeMailboxStore object that has theOwner
property (returns RDOAddressEntry object).