Being able to mail enable a sharepoint list is pretty cool; once enabled an email can receive email, save attachments, etc.. But what’s the address of the lists? How do you enable it? How are attachments stored, and how do we decide who to let email it?
Well, for a customer we wanted to email enable a list with an address based on the site’s title. This meant that the site would have to be created before we could enable the list. So, I stapled a feature to the site’s definition, and used a feature receiver to run my code.
The initial information on how to email enable a list came from here (thanks Niels Loup), but it doesn’t describe how to set up the other settings. Well, here’s my code:
SPWeb web = properties.Feature.Parent as SPWeb;
SPList mailbox = web.Lists[MAILBOX];
if (mailbox.CanReceiveEmail)
{
mailbox.EnableAssignToEmail = true;
mailbox.EmailAlias = Regex.Replace(web.Title, @"[^0-9a-z]", "", RegexOptions.IgnoreCase);
SPFolder rootFolder = mailbox.RootFolder;
rootFolder.Properties["vti_emailusesecurity"] = 0;
rootFolder.Properties["vti_emailsaveattachments"] = 1;
rootFolder.Properties["vti_emailattachmentfolders"] = "subject";
rootFolder.Properties["vti_emailoverwrite"] = 0;
rootFolder.Properties["vti_emailsavemeetings"] = 0;
rootFolder.Properties["vti_emailsaveoriginal"] = 1;
rootFolder.Update();
mailbox.Update();
}
else
{
throw new SPException(string.Format("'{0}' can not receive mail", MAILBOX));
}
You can see we’re enabling the list, setting it’s email address based on the Site Title (minus any non-alphanumeric characters. In our solution the site title will be a unique reference number anyway, so that should be okay).
The tricky bit is the other settings – which are actually stored on the rootfolder of the list! Most of those settings are zero (0) or one (1) for on or off. The exception to this is the email attachments folders setting which can be “sender”, “subject” or “root”.
I am doing exactly what you are showing using Windows PowerShell on a WSS install (no MOSS)
Setting the RootFolder properties works fine.
Setting the EmailAlias property works fine.
Setting the EnableAssignToEmail executes but does not actually persist.
The $Library.Update() line reports:
Exception calling “Update” with “0” argument(s): “Error in the application.”
$Library.Update( <<<< )
If I eMail enable the document library manually through the interface it works fine and the email contact is created, etc. However, when I then look at the properties for the document library, the EnableAssignToEmail property is set to false eventhough it is actually enabled.
I read somewhere that sharepoint keeps a list of email enabled document libraries. Maybe that is where it needs to be set?
How might that be done?
Thanks for you help.
Sorry, I don’t know – I’ve never used Powershell. Certainly, the code above is what I’ve used, and it seems to work alright.
How to do this with Client Object Model in .Net?
Looking at the API, I don’t think you can.
Hi Andy, thank you for this post as it was very helpful and I’m sure by the time you wrote it it was working fine but with SP 2013 there are some things worth notice:
– this property doesn’t exist anymore: rootFolder.Properties[“vti_emailsaveattachments”] = 1;
– this property is not necessary to enable incoming email mailbox.EnableAssignToEmail = true;
– this mailbox.Update() has to be called before rootFolder.Update() in order to ”
Allow this document library to receive e-mail?” be set to True
Again, many thanks for this post! 🙂