Build Your AI Email Agent with Microsoft Copilot Studio
In this tutorial, you'll learn how to create an AI agent that can send emails on your behalf. We'll use Microsoft Copilot Studio and the robust infrastructure of Azure Communication Services to create the AI agent that can be published on M365 Copilot, Teams, the web and many more. You can view the video tutorial for creating your AI agent below: Prerequisites: Microsoft Copilot Studio Access: You will need a license to use the platform. Azure Subscription: An active Azure account is required to set up the email sending service. Step 1: Create Your First Agent in Copilot Studio First, we'll create the basic framework for our AI assistant. Navigate to Copilot Studio: Open your web browser and go to copilotstudio.microsoft.com. Describe Your Agent: On the homepage, you'll see a prompt that says, "Describe your agent to create it." In the text box, type a simple description of what you want your agent to do. For this tutorial, use: "I want to create an agent that can send out emails using Azure communication services." Configure the Agent: Copilot Studio will generate a basic agent for you. You'll be taken to a configuration page. Give your agent a descriptive name, such as "AI Email Agent." Review the auto-generated description and instructions. You can modify these later if needed. Create the Agent: Click the Create button. Copilot Studio will now set up your agent's environment. Step 2: Set Up Your Email Service in Azure To give your agent the ability to send emails, we need to configure a backend service in Microsoft Azure. Go to the Azure Portal: Log in to your account at portal.azure.com. Create Resources: You will need to create two services: Communication Services: Search for "Communication Services" in the marketplace and create a new resource. This will serve as the main hub. More details can be found here: Create a communication service resource. Email Communication Services: Search for "Email Communication Services" and create this resource. This service is specifically for adding email capabilities. More details can be found here: Send email via azure communication services email Get Your Sender Address: Once these resources are created, you will have a sender address (e.g., DoNotReply@...). This is the email address your AI agent will use. Step 3: Connect Your Services with an Azure Function We need a way for Copilot Studio to communicate with Azure Communication Services to send the email. An Azure Function is the perfect tool to act as this bridge. Create a Function App: In the Azure portal, create a new Function App. This app will host our code. When setting it up, select Python as the runtime stack. Develop the Function: You'll write a simple Python script that acts as a web API. This script will: Receive data (recipient, subject, body) from Copilot Studio. Connect to your Azure Communication Services resource. Send the emai The code for the Azure Function app can be found on our Github page Deploy the Function: Once your code is ready, deploy it to the Function App you created. After deployment, make sure to get the Function URL, as you'll need it in the next step. In the Azure portal head over to your Function App. Go to Settings > Environment Variables, click Add. Add the following: Name: ACS_CONNECTION_STRING Value: <insert your connection string> Name: ACS_SENDER_EMAIL Value: <insert your send email address> (e.g. “DoNotReply@...) Make sure to click Apply, so your settings are applied. Note: For this tutorial, you can use Visual Studio Code with the "Azure Functions" and "Azure Resources" extensions installed to write and deploy your code efficiently. Step 4: Design the Conversation Flow in Copilot Studio Now, let's teach our agent how to interact with users to gather the necessary email details. We'll do this using a "Topic." Go to the Topics Tab: In your Copilot Studio agent, navigate to the Topics tab on the menu. Create a New Topic: Click + Add a topic and select From blank. You can ask Copilot to create a topic for you but for this tutorial we are going to create from scratch. Set the Trigger: The first node is the Trigger. This is what starts the conversation. Click on it and under "Phrases," add phrases like "send an email." This means whenever a user types this phrase, this topic will activate. Ask for the Recipient: Click the + icon below the trigger and select Ask a question. In the text box, type: "What's the recipient email?" Under "Identify," choose User's entire response. Save the response in a new variable called varRecipient. Ask for Subject and Body: Repeat the process above to ask for the Subject and Message body. Save the responses in variables named varSubject and varBody, respectively. Ask for Personalization (Optional): You can also ask for the Recipient's name for a personalized greeting and save it in a variable called varName. Step 5: Call the Azure Function to Send the Email With all the information gathered, it's time to send it to our Azure Function. Add an HTTP Request Node: Click the + icon below your last question. Go to Advanced > Send HTTP request. Configure the Request: URL: Paste the Function URL you copied from your Azure Function. Method: Select POST. Headers and body: Click Edit. For the body, select JSON content and use the formula editor to structure your data, mapping your topic variables (e.g., Topic.varSubject, Topic.varBody) to the JSON fields your function expects. Save the Response: The result from the Azure Function can be saved to a variable, such as varSendResult. This allows you to check if the email was sent successfully. Step 6: Test and Publish Your Agent Your AI email assistant is now fully configured! Let's test it out. Open the Test Panel: On the right side of the screen, open the Test your agent panel. Start a Conversation: Type your trigger phrase, "send an email," and press Enter. Follow the Prompts: The agent will ask you for the recipient, subject, and body. Provide the information as requested. Check Your Inbox: The agent will process the request and send the email. Check the recipient's inbox to confirm it has arrived! Publish: Once you are satisfied with the agent's performance, click the Publish button at the top of the page. You can then go to the Channels tab to deploy your agent to various platforms like Microsoft Teams, a demo website, or even Facebook. Congratulations! You have successfully built and deployed a functional AI email agent. Debugging and Troubleshooting Agent asking unnecessary information: If you want the agent to only ask the question that you have input and to not add anything extra. In your agent settings in Copilot Studio, turn off generative AI orchestration. This will force the AI agent to only asks questions Agent stuck in a loop: If, after sending, the agent jumps back to “What’s the recipient email?”, explicitly end the topic. Add + → Topic management → End current topic immediately after your success message. If you want branching, remember the HTTP Request action has no built-in success check, you can save the response (e.g., varSendResult), add a Condition that tests varSendResult.ok == true, and on success send a confirmation and End current topic to prevent loops.SPF, DKIM and DMARC bypassed for guest users
I manage a small non-profit using Microsoft 365 Business Basic. Most of the people on our board of directors are added as unlicensed guest users so that they can participate in Teams chats and meetings and to access our Sharepoint without using up a license. The problem: any email sent from an internal licensed user (or shared mailbox) to one of these guest users completely bypasses our domain's SPF, DKIM and DMARC configuration, resulting in bounced emails (particularly for recipients using gmail). Mail sent from an internal licensed user to any external address NOT registered as a guest user correctly passes SPF, DKIM and DMARC checks. I gather that this is because guest users are viewed as "internal" despite having external email addresses, but it seems like a serious limitation if I cannot reliably send email to anyone who is a guest user. Is there any extra configuration I can do to enable SPF, DKIM and DMARC for email to guest users?97Views0likes5CommentsI Can't use my own name to create a new Microsoft account in India.
I am an Indian Microsoft user, my full name is Aryan Rajput, which is legally registered by my parents in my country Republic of India. I don't know any norms of European countries about registering names, I don't know what restrictions are made, I can clarify my name, in my present situation is legal and legit. Moreover, none of my associates (including my parents) are pro-Nazi, and let me tell you leader of Nazism (I don't want to tell his name here hence I might be banned maybe) inspired by Indian culture and adopted terms like my name (Aryan means noble). Hence Microsoft should allow me to adopt my name in creating new account, because it's my right! At least they must allow in India where it is legal I hope the management would take necessary steps accordinglySolved137Views0likes3CommentsFavorites Section Missing from Outlook Classic
On the advice of this forum, I made the switch from the new Outlook to Outlook Classic on my new MS Surface Pro Laptop - THANK YOU FORUM. I have a problem with Outlook Classic that compared to my problem with the New Outlook, is less of an issue. The Favorites section that is usually above the individual accounts on the left is not there. I can right click on the Inbox to each of my accounts and then click on Add to Favorites and instead of the account showing up on the top, where there is a blank section that is typically where the Favorites are, I get a tag on the left, which are stacked on one another and all are labeled Inbox instead of an account identifier. Note that in the Account settings, a shortcut account ID is in the The 'Classic' Outlook on my old computer was fine in this area.Solved98Views0likes3CommentsUnable to upload .msg files via forms
Hello All, I want my users to upload .msg files through forms. They are unable to upload .msg files which are saved as messages from outlook. They are able to upload all other files like word, excel etc. Any help on this please ? Regards, Naveen M8.5KViews3likes14Commentsrevision de ortografia en outlook
Hola comunidad!!! en la nueva version de outlook tengo elegidos 2 idiomas: cuando se escribe texto en ingles sale todo marcado si realizo el cambio de idioma preferido a Ingles funciona, pero después al crear un nuevo correo en español salen marcadas todas. como hacer para que esto no suceda independiente del idioma en que se crea el correo, es decir que sea detectado de forma automatica e indique correcciones ortográficas segun lo que se escriba, en las opciones de idiomas de correcccion aparece hasta 3 idiomas.. falta algo por configurar?? Gracias...45Views0likes1CommentFetch Email of Login User Using Command or Script
Dear Team, We are working on retrieving email address of the user joined to Entra ID from Entra-joined Windows devices, specifically while running in a system context.The whoami /upn command successfully returns the joined user’s email address in a user context, but it does not work in a system context, particularly when using an elevated terminal via the psexec utility. We also tested the dsregcmd /status command; however, in a system context, the User Identity tab in the SSO State section only appears when there is an error in AzureAdPrt. Under normal, healthy operating conditions, this command does not provide the user identity or the full domain username. We would greatly appreciate guidance on how to retrieve the Entra ID joined user’s email address in a system context, especially from those with prior experience in this area. Thank you for your support.10Views0likes0CommentsCreating a Microsoft 365 Retention Policy for Shared Mailboxes
After being asked whether licenses are needed to include shared mailboxes in Microsoft 365 retention policies, I investigated and found that licenses are not. This led to a consideration of the steps needed to create a special retention policy for shared mailboxes (with PowerShell, naturally) and how to avoid retention setting collisions with other policies. All explained in detail here. https://office365itpros.com/2025/08/05/shared-mailboxes-retention/58Views0likes0CommentsACS Email now Generally Available in Azure Government
Microsoft today announced the General Availability (GA) of its Email Communication Service within Azure Government, a milestone that marks a significant advancement in secure and compliant digital communication for U.S. federal, state, and local government agencies. This release also includes FedRAMP High authorization, aligning the service with the most rigorous standards for cloud security and data protection. The Email Communication Service, part of Azure Communication Services (ACS), enables government customers to reliably send high-scale, programmatic email communications -- whether transactional, informational, promotional, or mission-critical -- while ensuring compliance with federal mandates and cybersecurity frameworks. Key Benefits for Government Customers: FedRAMP High Authorization: Provides assurance for handling Controlled Unclassified Information (CUI) and other sensitive government data. Built for Mission-Critical Communication: Enables reliable email delivery for scenarios like citizen engagement, emergency notifications, program updates, and case management. Scalable, Secure, and Compliant: Leverages the resiliency and compliance of Azure Government infrastructure, including FIPS 140-2 encryption, data residency, and advanced DDoS protection. Integration Ready: Seamlessly integrates with existing systems, applications, and services through REST APIs and SDKs, enabling faster modernization of legacy communication workflows. For more information, detailed guidance, or to get started, government customers are encouraged to explore Azure Communication Services documentation for additional support.10 Things You Might Not Know You Could Do with Azure Communication Services
Azure Communication Services gives developers the building blocks for voice, video, chat, SMS, and more. But the real magic happens when you start combining those capabilities with other Azure services to solve real-world problems. This blog isn’t a feature list or a product pitch. It’s a collection of creative, practical scenarios that show what’s possible with Azure Communication Services today. Each one is based on real questions, real demos, and real developer experiences. Some are simple. Some are surprisingly powerful. All of them are designed to spark ideas. We’ve included links to sample code, documentation, and visuals to help you dive deeper. And we’ll keep this post updated as new scenarios emerge, so if you’ve built something cool, let us know! Build a Voice Assistant That Understands Users—and Follows Through 🔎 Quick Look What it does: Create a voice-first assistant that can understand, respond, and follow up using natural language. Why it matters: Offers a more intelligent, flexible alternative to traditional IVRs. What you'll need: Azure Communication Services for voice, Azure OpenAI, and backend logic to handle actions. Most voice agents are limited to scripted menus or keyword matching. But with Azure Communication Services and Azure OpenAI, you can build a voice experience that actually understands what users are saying and responds with meaningful action. In this demo, a user calls a virtual assistant looking for dinner inspiration. Instead of navigating a rigid menu, they just talk naturally. The assistant interprets the request, asks follow-up questions, and sends a personalized recipe link via SMS—all powered by Azure Communication Services for both the voice and messaging workflows. This kind of voice-first interaction is ideal for customer support, concierge services, or any scenario where users want to speak naturally and get something done. Watch the video below to see the full experience in action or explore the demo yourself here. Send Responsive Messages in Real-Time 🔎 Quick Look What it does: Trigger personalized messages based on real-time user behavior (like missed appointments or failed logins). Why it matters: Helps you move beyond static reminders to more timely, relevant communication. What you’ll need: Azure Communication Services, Azure Event Grid, Azure OpenAI, and an event source like a Logic App or backend service. Most messaging systems are built around schedules: send a reminder at 9 AM, a follow-up two days later, and so on. But what if your messages could respond to what your users are doing right now? With Azure Communication Services, you can build event-driven workflows that trigger messages based on real-time behavior. A customer misses an appointment. A user completes a transaction. A login attempt fails. Using Azure Event Grid, you can detect these events, generate a tailored message with Azure OpenAI, and send it instantly via SMS, email, or WhatsApp using Azure Communication Servies. This approach helps teams move beyond static, one-size-fits-all messaging. It enables timely, relevant communication that’s easier to maintain and scale - without manually scripting every variation. Learn more and get started: Azure Communication Services as an Event Grid source Handle SMS events with Event Grid Push notifications overview Use Event Grid to send calling push notifications Let Users Schedule Appointments by Text – In Their Own Words 🔎 Quick Look What it does: Enable natural language scheduling over SMS. No apps, menus, or portals required. Why it matters: Makes scheduling faster and more user-friendly, especially for service-based businesses. What you’ll need: Azure Communication Services for SMS, Azure OpenAI to interpret intent, and a backend or Logic App to manage availability and confirmations. Coordinating appointments over email or phone is slow and manual. Even traditional SMS-based schedulers often rely on rigid decision trees that break when users type something unexpected. This demo takes a smarter approach. By combining Azure Communication Services with Azure OpenAI, it lets users book, confirm, or reschedule appointments through natural, conversational SMS - no app, no portal, no menus. Just text like you normally would: “Hey, can I move my appointment to next Tuesday?” “Do you have anything earlier in the day?” Behind the scenes, Azure Communication Services handles the messaging layer, while OpenAI interprets the user’s intent and routes it to backend logic that manages availability and confirmations. It’s a lightweight, flexible solution that’s ideal for clinics, service providers, or any business that wants to streamline scheduling—without sacrificing user experience. Try the SMS scheduling demo. Everything you need to get started is in the README. Reach Customers on WhatsApp – Right Alongside SMS & Email 🔎 Quick Look What it does: Send messages across WhatsApp, SMS, and email from a single workflow. Why it matters: Increases engagement by meeting users where they are. What you’ll need: Azure Communication Services with Advanced Messaging SDK, verified sender setup for each channel Your customers are already on WhatsApp. Now your app can be too, without rearchitecting your entire messaging stack. Azure Communication Services lets you send and receive WhatsApp messages using the same platform you already use for SMS, email, and chat. That means you can reuse your existing workflows, backend logic, and delivery infrastructure - just with a new channel that meets your users where they are. Whether it’s appointment reminders, shipping updates, or live customer support, WhatsApp becomes just another part of your communication toolkit. You can trigger messages using Azure Event Grid, automate replies with Azure Bot Framework, and manage everything through the Advanced Messaging SDK. Want to see it in action? This quickstart guide walks you through registering your WhatsApp Business Account, connecting it to Azure Communication Services, and sending both text and media messages. > Channels selected from the blade menu. Learn more: Overview of Advanced Messaging for WhatsApp Send text and media WhatsApp messages (Quickstart) Publish an agent to WhatsApp using Copilot Studio Let Customers Join a Teams Meeting- Without a Teams Account 🔎 Quick Look What it does: Embed a browser-based Teams meeting experience into your app or site. Why it matters: Makes it easy for customers to join secure meetings without downloading Teams or signing in. What you’ll need: Azure Communication Services with Teams interop, a Teams meeting link, and a web app or portal. Not every customer wants to download an app or create a Microsoft account just to join a meeting. With Azure Communication Services, you can embed a fully branded, browser-based meeting experience into your app or website that connects directly to a Microsoft Teams meeting - no Teams account required. This is especially useful for industries like healthcare, legal, or financial services, where external participants need to join secure consultations or appointments without friction. You control the UI, the branding, and the flow, while Azure Communication Services handles the real-time voice and video connection to Teams. You can see how this works in the interop-quickstart demo, which shows how to create a Teams meeting, generate a join link, and embed the experience in a custom app. Handle Teams Calls Inside Your CRM—No App Switch Required 🔎 Quick Look What it does: Let agents make and receive Teams calls directly inside Dynamics 365 or a custom contact center UI. Why it matters: Reduces context switching and improves agent efficiency. What you’ll need: Teams Phone Extensibility, Azure Communication Services Call Automation, Dynamics 365 or another CCaaS. Most contact center agents juggle multiple tools - CRM, phone, notes, AI assistants - just to handle a single call. But what if they could do it all in one place? With Teams Phone Extensibility, powered by Azure Communication Services, agents can make and receive Teams calls directly inside Dynamics 365 or any custom contact center app. No need to open the Teams client. Here’s what’s possible: Answer calls in a custom agent desktop, routed through Teams Phone. Trigger AI workflows mid-call—like summarizing the conversation with Azure OpenAI or escalating to a supervisor. Initiate outbound calls from bots or workflows using ACS’s Call Automation APIs. Record and analyze calls with full control over logic and storage. It’s a surprising way to bring AI, voice, and CRM together, without rebuilding your contact center from scratch. Embed Secure Video Visits to Your Healthcare App–Fast 🔎 Quick Look What it does: Add HIPAA-compliant video calling with identity integration. Why it matters: Enables secure, branded telehealth or consultation experiences. What you’ll need: Azure Communication Services for video, Azure AD B2C, and a secure frontend. Telehealth is here to stay. But building a secure, compliant video experience from scratch can be a heavy lift. Azure Communication Services makes it easier. With built-in support for HIPAA, GDPR, and SOC 2, encrypted media transport, and identity integration via Azure AD B2C, Azure Communication Services lets you embed video calling directly into your app—without compromising on privacy or user experience. The Sample Builder shows how to combine video, chat, and SMS into a seamless patient-provider experience. It’s ready to deploy, customize, and scale. Learn more: Azure Communication Services HIPAA compliance overview Quickstart - Add video calling to your app - An Azure Communication Services quickstart | Microsoft Learn Combine AI and Human Support in a Single Chat Experience 🔎 Quick Look What it does: Start with an AI assistant and escalate to a human agent with full context. Why it matters: Scales support while preserving the human touch when needed. What you’ll need: Azure Communication Services for chat, Azure OpenAI, bot framework, and agent handoff logic. Most customer service chats start with automation—but they shouldn’t get stuck there. With Azure Communication Services, you can build a chat experience that begins with an AI assistant and hands off to a human agent when it makes sense. This demo shows how it works: a customer starts chatting through a web widget. An AI assistant, powered by Azure OpenAI, handles common questions and tasks. If the conversation gets complex or the user asks for help, the chat transitions smoothly to a live agent—no context lost. Agents can even generate AI-powered summaries to get up to speed quickly before jumping in. It’s a practical way to scale support without sacrificing the human touch. . On the left, a dialog box displays the user experience, while on the right, the agent's view shows the conversation summary and includes a button to take over the automated chat. Build a voice-first, AI virtual assistant in Under a Week 🔎 Quick Look What it does: Launch a branded voice assistant quickly using Zammo.ai and ACS. Why it matters: Speeds up deployment of voice experiences across channels. What you’ll need: Zammo.ai, Azure Communication Services for voice, and a publishing channel (e.g., Alexa, web). When Montgomery County, Maryland needed to support COVID-19 vaccine registration, they didn’t have months to build a solution. In just six business days, they launched a voice-first virtual assistant that handled 100% of inbound calls: automating appointment scheduling, supporting English and Spanish, and deflecting thousands of calls from live agents. They partnered with Zammo.ai to build the experience, all without writing custom code. Where Azure Communication Services fits in: Azure Communication Services powered the voice infrastructure, enabling a scalable, multilingual experience that saved time, reduced hold times by 90%, and helped the county serve residents more equitably. Don’t take our word for it, learn more about how it came together here. Know What You’ll Pay, Before You Ship 🔎 Quick Look What it does: Estimate costs and usage before you build. Why it matters: Helps you plan and budget more effectively. What you’ll need: Azure Communication Services pricing calculator, usage estimator, and billing dashboard. One of the first questions developers ask when building with Azure Communication Services is: “How much is this going to cost me?” And the answer is: it depends, but in a good way. Azure Communication Services uses a flexible, pay-as-you-go pricing model. You’re only billed for what you use - no upfront commitments, no recurring subscription fees. That makes it easy to prototype, test, and scale without overcommitting. Each communication channel (SMS, email, voice/video calling, and WhatsApp) has its own pricing structure based on usage volume, geography, and delivery method. For example: SMS to U.S. numbers is priced differently than international messages. Voice calls vary depending on whether you’re using VoIP, PSTN, or Teams interop. WhatsApp pricing may involve partner-based rates through Messaging Connect. There are a few exceptions to the pay-as-you-go model. For instance, leasing a dedicated phone number incurs a monthly fee. But overall, the model is transparent and developer-friendly. To help you estimate costs and plan ahead, here are some helpful resources: Azure portal pricing calculator: Azure Communication Services pricing | Microsoft Azure Azure Communication Services Pricing Overview: Azure Communication Services pricing | Microsoft Azure What Will You Build Next? Azure Communication Services gives you the flexibility to build the communication experience your users actually want - whether that’s a quick SMS, a secure video call, or a voice assistant that gets things done. And when you combine ACS with other Azure services like OpenAI, Event Grid, and Bot Framework, the possibilities expand even further. We’ll keep this post updated as new scenarios and demos emerge. If you’ve built something interesting with ACS, we’d love to hear about it—and maybe even feature it in a future post. Check out our official documentation to get started today!