Symptôme : Certains utilisateurs s'abonnent à un rapport SSRS, ils choisissent le mode d'envoi par mail, ils définissent une planification et ils cochent la case "Inclure un rapport" pour recevoir le rapport dans le corps du mail (au format html ou autre). Lorsque l'heure d'exécution arrive, certains utilisateurs ne reçoivent pas le mail. Au niveau de l'abonnement, la colonne état indique :

Échec de l'envoi du message électronique : Le serveur de rapports a rencontré une erreur de configuration. Le message ne sera pas renvoyé.

Si on vérifie les logs dans "C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\LogFiles" l'erreur suivante apparait au moment de l'exécution de l'abonnement :

AuthzInitializeContextFromSid: Win32 error: 1355

Diagnostique : Lors de la génération du rapport à inclure dans le mail, SSRS doit vérifier que le propriétaire de l'abonnement a bien le droit de consulter le rapport. Pour cela, l'authentification Kerberos est utilisée. En faisant des captures de trame dans le cas ou cela échoue, la requête TGS-REQ reçoit la réponse KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN. Dans le cas ou l'abonnement fonctionne, on voit que le serveur contacte le contrôleur de domaine de l'utilisateur propriétaire de l'abonnement. Voilà pourquoi cela fonctionne pour certains et pas pour d'autres. Les utilisateurs pour lesquels l'abonnement fonctionnent font parti du même domaine que le serveur. Pour les autres, et bien le serveur n'est pas en mesure de communiquer avec les contrôleurs de domaine.

Solution : La solution logique consiste à permettre la communication entre le serveur SSRS et les contrôleurs de domaine des domaines des utilisateurs et peut-être de définir un SPN (service principal name) vu le message d'erreur dans la capture de trame. Mais je n'ai pas testé cette solution.
Le serveur SSRS était externalisé et la communication avec le contrôleur de domaine de son domaine établie via un VPN qu'on ne souhaitait pas faire évoluer. Dés lors la solution a été de mettre à jour le propriétaire des abonnements avec un compte appartenant au domaine avec lequel le serveur était capable de communiquer. Pour cela il suffit de faire un update dans la table "Subscriptions" en remplaçant le "OwnerID". "OwnerID" que l'on trouve dans la table "Users". Planifier cet update une fois par jour via un script et une tâche planifiée.