Updating email address for SharePoint online users if they’re a Live / Microsoft Account…
If you have a SharePoint online ()365) site, and you invite users that logon with a “Microsoft Account”, those users won’t be able to receive email. Things such as alerts won’t work.
However, you can run the code below and it will parse out all users that are “invitees” and part of the Microsoft account structure (Live.com) and just update their email, based upon what their Microsoft Account email address is.
Note: use this at your own risk. This makes use of logon via Forms/Claims that is part of the solution here:
Remote Authentication in SharePoint Online Using the Client Object Model
http://code.msdn.microsoft.com/Remote-Authentication-in-b7b6f43c
Full solution is here: Solution
namespace ConsoleApplication1 { class Program { [STAThread] static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("SP_Ctx <url>"); return; } string targetSite = args[0]; using (ClientContext ctx = ClaimClientContext.GetAuthenticatedContext(targetSite)) { if (ctx != null) { ctx.Load(ctx.Web, website => website.SiteUsers, website => website.SiteUserInfoList); // Query for Webctx.ExecuteQuery(); // Execute ListSiteUsers(ctx); } } Console.WriteLine("Press enter to exit..."); Console.ReadLine(); } static void ListSiteUsers(ClientContext ctx) { var users = ctx.Web.SiteUsers.AsQueryable(); foreach (var user in users) { ctx.Load(user, u => u.UserId); ctx.ExecuteQuery(); if (user.UserId == null) { string[] parts = user.LoginName.Split('|'); if (parts.Length == 3 && parts[1].Equals("membership", StringComparison.InvariantCultureIgnoreCase)) UpdateUser(ctx, user, parts[2]); } } } static void UpdateUser(ClientContext ctx, User user, string liveId) { string[] parts = liveId.Split('#'); var email = parts[1]; Console.WriteLine("user: {0} email: {1}", user.LoginName, email); var userToUpdate = ctx.Web.SiteUsers.GetByLoginName(user.LoginName); user.Context.ExecuteQuery(); if (null != userToUpdate) { userToUpdate.Email = email; userToUpdate.Update(); ctx.ExecuteQuery(); } else Console.WriteLine("User was null: {0}", user.LoginName); } }
}