To send an email as the signed-in user, construct a SendMailPostRequestBody containing a Message object. The Message object requires fields like subject, from_, to_recipients, and body (an ItemBody).
Setup Requirements:
- App Registration:
Platform: Mobile and desktop applications with redirect_uri (e.g., http://localhost) and public client flow enabled. - API Permissions:
Mail.Send.
import asyncio
from msgraph import GraphServiceClient
from msgraph.generated.users.item.send_mail.send_mail_post_request_body import SendMailPostRequestBody
from msgraph.generated.models.body_type import BodyType
from msgraph.generated.models.message import Message
from msgraph.generated.models.email_address import EmailAddress
from msgraph.generated.models.item_body import ItemBody
from msgraph.generated.models.recipient import Recipient
from azure.identity import InteractiveBrowserCredential
# Setup credentials
credential = InteractiveBrowserCredential(client_id='...', authority='...', tenant_id='...', redirect_uri='...')
scopes = ['Mail.Send']
client = GraphServiceClient(credentials=credential, scopes=scopes)
async def send_mail():
sender = EmailAddress(address='john.doe@outlook.com', name='John Doe')
from_recipient = Recipient(email_address=sender)
recipients = []
recipient_email = EmailAddress(address='jane.doe@outlook.com', name='Jane Doe')
recipients.append(Recipient(email_address=recipient_email))
email_body = ItemBody(content='Dummy content', content_type=BodyType.Text)
message = Message(
subject='Test Email',
from_escaped=from_recipient,
to_recipients=recipients,
body=email_body
)
request_body = SendMailPostRequestBody(message=message)
await client.me.send_mail.post(request_body)
asyncio.run(send_mail())