Share via


Корректная работа приветственных электронных писем с пользовательским поставщиком утверждений в SharePoint 2010

Исходная статья опубликована в четверг 3 мая 2012 г.

Хороший “друг блога”, Israel V., любезно заметил мне недавно, что практически все примеры кода, которые у нас есть для пользовательских поставщиков утверждений, содержат небольшую раздражающую ошибку: если выполнять такие примеры, то приветственные электронные письма, которые должны отправляться при добавлении нового человека на сайт, не отправляются. Конечно, я в этом виноват так же, как и все остальные здесь, поэтому я внимательней присмотрелся к этой проблеме, а также посмотрел код, написанный Israel для ее обхода.

В двух словах, эта проблема возникает при первом добавлении пользователя в семейство сайтов, когда с ним не связан адрес электронной почты, потому что синхронизация профиля еще не прошла или по другим причинам. Таким образом, как легко понять, здесь нужно (я сейчас рассматриваю простейший сценарий) получить адрес электронной почты для пользователя в момент его добавления, а затем связать его с соответствующим свойством в классе PickerEntity. Теперь поговорим о деталях.

ОТКУДА берется адрес электронной почты, полностью зависит от поставщика утверждений. Если данные берутся из Active Directory, то для получения адреса можно выполнить соответствующий запрос к AD. При использовании SAML, когда адрес является утверждением удостоверения, можно просто взять этот адрес. В целом все зависит от ситуации.

ВРЕМЯ его использования — вызов метода FillResolve. Как вы знаете, этот метод можно вызывать либо после того, как кто-либо добавляет запись через средство выбора людей, либо при вводе значения в поле и нажатии кнопки проверки. Как я демонстрировал во многих своих примерах кода, в ходе этого процесса создается экземпляр класса PickerEntity, который можно добавить в List<PickerEntity>, передаваемый в метод.

СПОСОБ добавления — нужно просто задать значение свойства в экземпляре PickerEntity примерно так:

//нужно было, чтобы заработали приветственные электронные письма.

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

В этом примере “pe” — это просто экземпляр созданного мной класса PickerEntity, который возвращается в метод FillResolve.

Вот и все. Самым сложным здесь является получение адреса электронной почты. После этого, несмотря на то, что добавить его в PickerEntity очень легко, чтобы убедиться, что приветственные электронные письма будут работать, я протестировал это решение и убедился, что а) приветственные электронные письма не отправлялись с моим оригинальным пользовательским поставщиком утверждений и б) они ЗАРАБОТАЛИ после внедрения этого изменения. Еще раз спасибо Israel V. за предупреждение и пример кода по этой проблеме.

Это локализованная запись блога. Исходная статья доступна по адресу: Getting Welcome Emails to Work with a Custom Claims Provider in SharePoint 2010