The Small Things
- Email aliases / SMTP Addresses
- Calendars
- Organizational forms
Email aliases / SMTP Addresses
So. Plain environment. Exchange is non-existent. DirSync is available. Lots of attributes are missing. We need to create custom email addresses that match what was set on an external provider’s email system. What tools can we use to do this? PowerShell and ADModify. Why ADModfy? Why not all Powershell (which we can do as well). Simply put, because ADModify gives a GUI interface for more novice admins.
First Step
Creating a ‘mailnickname’ value in AD. The client needed to use the first initial and last name to create the value we needed.
import-module activedirectory Add-PSSnapin Quest.ActiveRoles.ADManagement $names = get-aduser -filter * -Properties * foreach ($line in $names) { if ($line.givenname -ne $null) { if ($line.givenname -ne $null) { $name = $line.DistinguishedName $n = $line.givenname $f = $n[0] $surname = $line.surname $mailnickname = $f+$surname # get-aduser $line | set-aduser -properties * -mailnickname $mailnickname Set-QADUser -identity $name -ObjectAttributes @{mailnickname = $mailnickname} } } }
The above script uses a set of PowerShell cmdlets that are hard to find these days. The tool was originally created by Quest. Quest has since been purchased by Dell and the tools seemed to have been removed. However, after a bit of searching, I was able to find the tools here for downloading. Download the tools on whatever machine you are going to use for management. Any script utilizing the tools should use the Add-PSSnapin Quest.ActiveRoles.ADManagement one liner before executing the commands.
On to ADModify
Once each user account was tagged with a MailNickname, we can now use ADModify to utilize that value for assigning an SMTP address.
Depending on your Server OS, you may need to run this as an Administrator account:
Once the program opens up, click on ‘Modify Attributes’:
Once the tool was opened, we selected the domain, and OU where the users were and added then to the list of the right. Then click ‘Next’:
Once the properties editor comes up, we selected the ‘Email Addresses’ tab. Checked ‘Add SMTP Address’ and ‘Set As Primary’. For the format, we used %’mailNickName’%@domain.com
. Then clicked ‘Go!’:
After all the AD attributes are replicated in internal AD, run a dirsync to get the attributes into Office 365.
Templates
Recently I wrote an article on how to add the Organizational Forms Library to Office 365. With this client, we decided not to go this route due to the lack of experience with Outlook forms, the time it would take to recreate a hundred forms as well as the ease of use of the solution we found. Several vendors have products out there for Outlook forms that provide more flexibility and less complication than a Forms Library in Exchange Online.
Possible Vendors
MAPILAb – Quick Templates for Outlook
Able Bits – Template Phrases for Microsoft Outlook
In the end, the solution they picked enabled them to create templates, share templates and use them like their old email system.
Shared Calendars
As with any migration, there are some options or configuration settings that are not necessarily discussed. Shared Calendars come to mind. While I knew we needed to create the calendars, we had not done a deep dive into the various functions that might be needed for their workflows. We had discussed making the calendars available for external senders (for their hosted CRM solution). However, there were more options that could be configured.
First we examined the default settings for Room Resource Calendar processing:
get-mailbox | where {$_.recipienttypedetails -eq "roommailbox"} | get-calendarprocessing | fl
For the changes, the key was the external message processing. The client also wanted the subject, comments and a few other items tweaked:
To do so, I used this PowerShell one-liner:
Get-Mailbox | where {$_.RecipientTypeDetails -eq "roommailbox"} | Set-CalendarProcessing -AllowConflicts $true -DeleteAttachments $false -DeleteSubject $false -DeleteComments $false -AddNewRequestsTentatively $false -TentativePendingApproval $false -ProcessExternalMeetingMessages $true
Now all the rooms have the same settings for what the client needs. The settings can be validated with the same command:
get-mailbox | where {$_.recipienttypedetails -eq "roommailbox"} | get-calendarprocessing | fl
After changing the calendar processing settings for each room resources, we validated the settings by sending meeting invites from the external source. We verified that the invite was processed, added to the calendar and the information we wanted to stay, was not deleted from the appointment.
Further Reading
Set-CalendarProcessing
Set-QADUser
Thanks