Hi @Julian Cram
You can use the graph C# SDK to send mail on behalf of users in the tenant. Before doing this, you need to grant the Mail.Send
application permission to the calling app.
Refer to the complete sample code:
using Microsoft.Graph;
using Azure.Identity;
using Microsoft.Graph.Models;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "{tenant id}";
// Values from app registration
var clientId = "{client id}";
var clientSecret = "{client secret}";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://learn.microsoft.com/dotnet/api/azure.identity.clientsecretcredential
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var accessToken = await clientSecretCredential.GetTokenAsync(new Azure.Core.TokenRequestContext(scopes) { });
Console.WriteLine(accessToken.Token);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var requestBody = new Microsoft.Graph.Users.Item.SendMail.SendMailPostRequestBody
{
Message = new Message
{
Subject = "Meet for lunch?",
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = "The new cafeteria is open.",
},
ToRecipients = new List<Recipient>
{
new Recipient
{
EmailAddress = new EmailAddress
{
Address = "xxxx@xxxxxxxxxxx",
},
},
},
},
SaveToSentItems = false,
};
await graphClient.Users["{user id}"].SendMail.PostAsync(requestBody);
By the way, with the graph SDK you don't need to manually add the access token as a request header, but you can export it in the console and decode it for troubleshooting.
Hope this helps.
If the reply is helpful, please click Accept Answer and kindly upvote it. If you have additional questions about this answer, please click Comment.