【问题标题】:How can I get the account associated to a meeting request?如何获取与会议请求关联的帐户?
【发布时间】:2022-04-29 11:40:10
【问题描述】:

我需要知道与会议请求相关联的帐户电子邮件地址(会议请求发送到的电子邮件地址):

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 返回相同的电子邮件地址。

仅供参考:我正在使用 VS 2015 为 Outlook 2013 开发 Outlook 插件。

【问题讨论】:

  • 嗯,两个会议请求都有相同的收件人,所以难怪您会得到相同的结果 - 您的代码返回第一个匹配的地址。您需要查看父商店并找出其所有者。
  • @DmitryStreblechenko。什么的父母?我查看 GetAssociatedAccountEmailAddress1 上的父级,但它似乎不是正确的方法?你能详细说明一下吗?请。
  • 我的意思是会议请求所在文件夹的父存储。
  • @DmitryStreblechenko 我如何才能找到店主帐户?我找不到直接关系

标签: c# outlook vsto outlook-addin


【解决方案1】:

有几种方法可以做到这一点 -

  1. 使用MeetingItem.PropertyAccessor.GetProperty 读取PR_RECEIVED_BY_ENTRYID 属性(不保证存在,DASL 名称http://schemas.microsoft.com/mapi/proptag/0x003F0102),使用PropertyAccessor.BinaryToString 将其转换为十六进制字符串,使用它调用Application.Session.GetAddressEntryFromID。请注意,如果该项目是从其他商店复制的,则该属性可能与实际的商店所有者不匹配。使用OutlookSpy(我是它的作者)查看会议请求 - 单击 IMessage 按钮查看该属性。

  2. 使用 Store.PropertyAccessor.GetProperty 从父存储 (MeetingItem.Parent.Store) 读取 PR_MAILBOX_OWNER_ENTRYID 属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x661B0102)。不保证该物业存在。如果使用Redemption(我也是它的作者)是一个选项,它会公开具有Owner 属性的RDOExchangeMailboxStore 对象(返回RDOAddressEntry 对象)。

【讨论】:

  • 谢谢。第一个对我有用。我想我需要同时尝试两者,如果两者都不起作用,则回退到一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2013-10-19
  • 2012-11-27
相关资源
最近更新 更多