Les utilisateurs anonymes ne sont pas autorisés à déclencher certains flux de travail (workflow), notamment ceux qui envoient des mails.
Prenons l’exemple d’une liste qui déclenche un workflow d’envoi de mail sur l’ajout d’un élément :

Ici l’envoi de mail sera un échec, car la tâche d’envoi de mail nécessite plus de droit que ne peut avoir un utilisateur anonyme.
Pour remédier à cela, une solution serait de faire déclencher le workflow par un événement tiers :

Il suffit d’insérer un event-handler qui va prendre en charge l’événement « ajout d’un élément » à la place du workflow, et qui va forcer le démarrage du workflow « à la main ».
Le code de l’event-handler pourrait ressembler à cela :
public class List_EventReceiver : SPItemEventReceiver
{
/// <summary>
/// Un élément a été ajouté, on lance le workflow avec privilèges.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
// Exécution en élévation de privilège
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://mon_site"))
{
using (SPWeb siteWeb = site.OpenWeb())
{
SPList list = siteWeb.Lists["Ma_Liste"];
SPWorkflowAssociation wf = list.WorkflowAssociations.GetAssociationByName("Nom_du_Workflow", System.Globalization.CultureInfo.CurrentCulture);
// Lancement du workflow
site.WorkflowManager.StartWorkflow(list.GetItemById(properties.ListItemId), wf, wf.AssociationData);
}
}
});
}
}