Freigeben über


Hinzufügen von E-Mail-Funktionen zu Python-Apps mithilfe von Microsoft Graph

In diesem Artikel erweitern Sie die Anwendung, die Sie unter Erstellen von Python-Apps mit Microsoft Graph mit Microsoft Graph-E-Mail-APIs erstellt haben. Sie verwenden Microsoft Graph, um den Posteingang des Benutzers aufzulisten und eine E-Mail zu senden.

Auflisten des Posteingangs des Benutzers

Beginnen Sie mit dem Auflisten von Nachrichten im E-Mail-Posteingang des Benutzers.

  1. Fügen Sie graph.py die folgende Funktion hinzu.

    async def get_inbox(self):
        query_params = MessagesRequestBuilder.MessagesRequestBuilderGetQueryParameters(
            # Only request specific properties
            select=['from', 'isRead', 'receivedDateTime', 'subject'],
            # Get at most 25 results
            top=25,
            # Sort by received time, newest first
            orderby=['receivedDateTime DESC']
        )
        request_config = MessagesRequestBuilder.MessagesRequestBuilderGetRequestConfiguration(
            query_parameters= query_params
        )
    
        messages = await self.user_client.me.mail_folders.by_mail_folder_id('inbox').messages.get(
                request_configuration=request_config)
        return messages
    
  2. Ersetzen Sie die leere list_inbox Funktion in Standard.py durch Folgendes.

    async def list_inbox(graph: Graph):
        message_page = await graph.get_inbox()
        if message_page and message_page.value:
            # Output each message's details
            for message in message_page.value:
                print('Message:', message.subject)
                if (
                    message.from_ and
                    message.from_.email_address
                ):
                    print('  From:', message.from_.email_address.name or 'NONE')
                else:
                    print('  From: NONE')
                print('  Status:', 'Read' if message.is_read else 'Unread')
                print('  Received:', message.received_date_time)
    
            # If @odata.nextLink is present
            more_available = message_page.odata_next_link is not None
            print('\nMore messages available?', more_available, '\n')
    
  3. Führen Sie die App aus, melden Sie sich an, und wählen Sie Option 2 aus, um Ihren Posteingang aufzulisten.

    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List my inbox
    3. Send mail
    4. Make a Graph call
    2
    Message: Updates from Ask HR and other communities
      From: Contoso Demo on Yammer
      Status: Read
      Received: 2022-04-26T19:19:05Z
    Message: Employee Initiative Thoughts
      From: Patti Fernandez
      Status: Read
      Received: 2022-04-25T19:43:57Z
    Message: Voice Mail (11 seconds)
      From: Alex Wilber
      Status: Unread
      Received: 2022-04-22T19:43:23Z
    Message: Our Spring Blog Update
      From: Alex Wilber
      Status: Unread
      Received: 2022-04-19T22:19:02Z
    Message: Atlanta Flight Reservation
      From: Alex Wilber
      Status: Unread
      Received: 2022-04-19T15:15:56Z
    Message: Atlanta Trip Itinerary - down time
      From: Alex Wilber
      Status: Unread
      Received: 2022-04-18T14:24:16Z
    
    ...
    
    More messages available? True
    

get_inbox erläutert

Betrachten Sie den Code in der get_inbox Funktion.

Zugreifen auf bekannte E-Mail-Ordner

Die Funktion erstellt eine Anforderung an die API zum Auflisten von Nachrichten . Da sie den Anforderungs-Generator mail_folders.by_mail_folder_id('inbox') enthält, gibt die API nur Nachrichten im angeforderten E-Mail-Ordner zurück. Da der Posteingang in diesem Fall ein bekannter Standardordner innerhalb des Postfachs eines Benutzers ist, ist er über seinen bekannten Namen zugänglich. Auf nicht standardmäßige Ordner wird auf die gleiche Weise zugegriffen, indem der bekannte Name durch die ID-Eigenschaft des E-Mail-Ordners ersetzt wird. Ausführliche Informationen zu den verfügbaren bekannten Ordnernamen finden Sie unter mailFolder-Ressourcentyp.

Zugreifen auf eine Sammlung

Im Gegensatz zur get_user Funktion aus dem vorherigen Abschnitt, die ein einzelnes Objekt zurückgibt, gibt diese Methode eine Auflistung von Nachrichten zurück. Die meisten APIs in Microsoft Graph, die eine Sammlung zurückgeben, geben nicht alle verfügbaren Ergebnisse in einer einzigen Antwort zurück. Stattdessen verwenden sie Paging , um einen Teil der Ergebnisse zurückzugeben, während eine Methode für Clients bereitgestellt wird, um die nächste Seite anzufordern.

Standardseitengrößen

APIs, die Paging verwenden, implementieren eine Standardseitengröße. Für Nachrichten ist der Standardwert 10. Clients können mithilfe des abfrageparameters $top mehr (oder weniger) anfordern. In get_inboxerfolgt das Hinzufügen $top mit dem top -Parameter im MessagesRequestBuilderGetQueryParameters -Objekt.

Hinweis

Der übergebene $top Wert ist eine obere Grenze, keine explizite Zahl. Die API gibt eine Anzahl von Nachrichten bis zum angegebenen Wert zurück.

Abrufen nachfolgender Seiten

Wenn auf dem Server weitere Ergebnisse verfügbar sind, enthalten Sammlungsantworten eine @odata.nextLink Eigenschaft mit einer API-URL für den Zugriff auf die nächste Seite. Das Python SDK stellt die odata_next_link -Eigenschaft für Sammlungsseitenobjekte bereit. Wenn diese Eigenschaft vorhanden ist, sind weitere Ergebnisse verfügbar.

Sortieren von Sammlungen

Die Funktion verwendet den Abfrageparameter $orderby , um Ergebnisse anzufordern, die nach dem Zeitpunkt sortiert sind, zu dem die Nachricht empfangen wird (receivedDateTime -Eigenschaft). Sie enthält die DESC Schlüsselwort (keyword), sodass kürzlich empfangene Nachrichten zuerst aufgeführt werden. In get_inboxerfolgt das Hinzufügen $orderby mit dem orderby -Parameter im MessagesRequestBuilderGetQueryParameters -Objekt.

Nachrichten senden

Fügen Sie nun die Möglichkeit hinzu, eine E-Mail-Nachricht als authentifizierten Benutzer zu senden.

  1. Fügen Sie graph.py die folgende Funktion hinzu.

    async def send_mail(self, subject: str, body: str, recipient: str):
        message = Message()
        message.subject = subject
    
        message.body = ItemBody()
        message.body.content_type = BodyType.Text
        message.body.content = body
    
        to_recipient = Recipient()
        to_recipient.email_address = EmailAddress()
        to_recipient.email_address.address = recipient
        message.to_recipients = []
        message.to_recipients.append(to_recipient)
    
        request_body = SendMailPostRequestBody()
        request_body.message = message
    
        await self.user_client.me.send_mail.post(body=request_body)
    
  2. Ersetzen Sie die leere send_mail Funktion in Standard.py durch Folgendes.

    async def send_mail(graph: Graph):
        # Send mail to the signed-in user
        # Get the user for their email address
        user = await graph.get_user()
        if user:
            user_email = user.mail or user.user_principal_name
    
            await graph.send_mail('Testing Microsoft Graph', 'Hello world!', user_email or '')
            print('Mail sent.\n')
    
  3. Führen Sie die App aus, melden Sie sich an, und wählen Sie Option 3 aus, um eine E-Mail an sich selbst zu senden.

    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List my inbox
    3. Send mail
    4. Make a Graph call
    3
    Mail sent.
    

    Hinweis

    Wenn Sie mit einem Entwicklermandanten aus dem Microsoft 365-Entwicklerprogramm testen, wird die von Ihnen gesendete E-Mail möglicherweise nicht zugestellt, und Sie erhalten möglicherweise einen Nicht-Lieferbericht. Wenn Sie die Blockierung des Sendens von E-Mails von Ihrem Mandanten aufheben möchten, wenden Sie sich über die Microsoft 365 Admin Center an den Support.

  4. Um zu überprüfen, ob die Nachricht empfangen wurde, wählen Sie Option 2 aus, um Ihren Posteingang aufzulisten.

send_mail erläutert

Betrachten Sie den Code in der send_mail Funktion.

Senden von E-Mails

Die Funktion verwendet den Anforderungs-Generator user_client.me.send_mail , der eine Anforderung an die API zum Senden von E-Mails erstellt.

Erstellen von Objekten

Im Gegensatz zu den vorherigen Aufrufen von Microsoft Graph, die nur Daten lesen, werden mit diesem Aufruf Daten erstellt. Um Elemente mit der Clientbibliothek zu erstellen, erstellen Sie ein Wörterbuch, das die Anforderungsnutzlast darstellt, legen die gewünschten Eigenschaften fest und senden sie dann im API-Aufruf. Da der Aufruf Daten sendet, wird die post -Methode anstelle von getverwendet.

Nächster Schritt