SharePoint 2010 : Workflow d'envoi de mails déclenché par un utilisateur anonyme.

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 :
Workflow_1
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 :
Workflow_2
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);
        }
      }
   });
 }
}