使欢迎电子邮件与 SharePoint 2010 中的自定义声明提供程序一起工作

原文发布于 2012 年 5 月 3 日(星期四)

一位忠实的“博客之友”Israel V. 最近向我指出,几乎所有的自定义声明提供程序的代码示例都有一个令人抓狂的小缺陷,那就是,如果您按照这些示例进行操作,则在您将新的人员添加到网站时,应发出去的欢迎电子邮件无法发送出去。当然,我与其他人一样对此感到内疚,因此,我仔细查看了这种情况,并快速检查了 Israel 为解决此问题而开发的部分代码。

简而言之,如果您是初次将某个用户添加到网站集,因此没有与此人相关联的电子邮件地址,则您会看到此类问题的发生,这是因为没有发生配置文件同步等诸如此类的事。因此,正如您所想的,关键(我将此问题归结为最简单的情况)就是要在添加用户的同时为其获取电子邮件地址,然后将该地址插入 PickerEntity 类中的适当属性中。现在,就让我们探讨下一些细节问题。

您获取电子邮件地址的位置将完全取决于您的声明提供程序。如果您是从 Active Directory 中抽取数据,则可以查询 AD 以获取地址。如果您使用的是 SAML 且电子邮件地址是标识声明,则重新使用该地址即可。基本上来说“视情况而定”,因此需要由您做出决定。

要使用电子邮件地址的时候就是调用 FillResolve 方法的时候。如您所知,可在某人通过人员选取器添加项之后调用此方法,也可在用户在键入控件中键入值并单击解决按钮时调用此方法。就像我在许多代码示例中显示的一样,在该过程中,您将创建一个 PickerEntity 类实例,以便您能够将其添加到被传递到该方法的 List<PickerEntity> 中。

具体添加方式就是按如下所示在 PickerEntity 实例上设置属性:

//needed to make welcome emails work:

pe.EntityData[PeopleEditorEntityDataKeys.Email] = "steve@stevepeschka.com";

在此示例中,“pe”就是我所创建的和返回 FillResolve 方法的 PickerEntity 类的实例。

问题的症结就在这里。其中最大的难点在于获取电子邮件地址值。然而,一旦您获取了地址,将其添加到 PickerEntity 中以确保您的欢迎电子邮件运行正常就相当容易了。我已对这点进行了测试,并证实了两点:第一,欢迎电子邮件不会和我的原始自定义声明提供程序一起发出;第二,在做了此更改后邮件确实开始发出。再次感谢 Israel V. 能够带头提出此问题并为我们提供了解决问题的代码示例。

这是一篇本地化的博客文章。请访问 Getting Welcome Emails to Work with a Custom Claims Provider in SharePoint 2010 以查看原文