I tend to lurk on the r/MSP subreddit and one of the most common things that I see being asked about is how MSPs stay in contact with their customers. Whether it is a security alert, update, or just a notification; getting a message to out to everyone at every single person at all of your customers is hard. Most of the responses that I see to these questions are to use a tool like: HubSpot, MailChimp, or just a Point-of-Contact at each customer and let them handle getting the message out. None of those options felt right to me. Whether it was price, difficulty to implement, having to maintain another contact list, or some other thing; it seemed like there had to be a better option.
Here are the requirements that I had for my notification system:
The Microsoft Power Platform seemed like a no-brainer for this project. I already have the licenses that I need to utilize the premium connectors in Power Automate, and a Power Apps Per App Plan is only $5/month. I could create a custom model-driven power app on top of Dataverse that would utilize Power Automate to send out the emails that I wanted! Easy, right? Well, kind of. There were a few problems:
So, here is what I did to get started.
Creating a Dynamic Distribution Group
All of the customers that I work with exist in Microsoft 365 environments and all the users that I would want to get in contact with have mailboxes in Microsoft Exchange. With that knowledge, I knew where I had to start. To begin, I created a dynamic distribution list in each customer's Exchange environment and set this to add all users with Exchange mailboxes. I've named my group "All Users."
A brief note: Microsoft Directory-Based Edge Blocking prevents sending to a dynamic distribution list in hybrid environments. If you are working in a hybrid environment, Microsoft suggests making a mail contact with the same external email address of the blocked dynamic distribution list to get the address to sync to Microsoft Entra ID.
Next, I wanted to make sure that not just anyone can send an email to my newly created group. To do this, in Exchange I went to create a mail contact for the address that my notifications are going to be coming from. From Exchange, go to Recipients > Contacts and select "Add a mail contact."
Now that I had a contact for the address that I will be sending my notifications out from, I wanted to lock down my dynamic distribution list to only allow emails from my contact. To do this, I opened my dynamic distribution list by going to Recipients > Groups > Dynamic distribution list and selecting my "All Users" group. With the group open, I switched to the "Settings" tab and selected "Edit delivery management." Toggled the "Allow messages from people inside and outside my organization" option and added my contact to the "Specified senders" list.
These steps had to be repeated in the Exchange environments for every customer that I planned on including in my notification system. I plan on going into detail on how you can automate this process at a later date.
Setting up our Azure environment
From here, I needed to have a service to send out the emails for me. I could use Power Automate to send out these emails, but that would run the risk of getting my domain flagged as spam and potentially being added to a block list. This is why companies use services like MailChimp. Like I said before, this isn't a great option because it requires you me to maintain another customer list and the price can rack up quickly. Instead, I took advantage of a deal between Microsoft and Twilio to use Twilio SendGrid for free.
To start, I navigated to the Azure Portal, clicked "Create a resource," and searched for "SendGrid."
There are a number of plans available for SendGrid through Azure. I will be using the "Free 100 (2022)" plan. This plan is 100% free and allows you to send out 100 emails per month. While 100 emails may not seem like a lot, sending a notification to every user at a single customer could easily eat through that, the reality is that because of the dynamic distribution list that I previously made I will only sending a single email per customer from SendGrid. Should you need to be able to send out more than 100 emails per month, the next step up is the Essentials 50k plan and is only $20/month for 50,000 emails.
Once you have subscribed to SendGrid, follow Twilio's documentation for setting up your account and domain. You can stop after Chapter 4; we won't be doing any contact management through SendGrid.
In the coming posts, I will show you how to setup your email templates, configure your Dataverse tables, create your Power App, and design your Power Automate Flows.
Thank you!