Jak pobrać status dostarczenia wiadomości email poprzez API w Entra app.

Mateusz Tyra - MIRJAN 24 0 Punkty reputacji
2026-02-27T11:15:42.0966667+00:00

Witaj,

Integrujemy się z usługą Microsoft 365 (Exchange Online) i chcielibyśmy potwierdzić, czy istnieje oficjalna, obsługiwana funkcja API umożliwiająca pobieranie statusu konkretnej wiadomości e-mail po jej wysłaniu.

Przypadek użycia

• Mając wysłaną wiadomość (możemy przechowywać identyfikatory, takie jak Internet Message-ID, Graph Message ID, temat, nadawca, odbiorcy, znaczniki czasu), chcemy wysłać zapytanie do API, aby określić:

  1. Status dostarczenia (dostarczona/nieudana/opóźniona) dla każdego odbiorcy i/lub
  2. Czy odbiorca przeczytał/otworzył wiadomość.

Pytania

  1. Czy istnieje punkt końcowy interfejsu API Microsoft Graph, który zwraca status dostarczenia wysłanej wiadomości (dla każdego odbiorcy) w usłudze Exchange Online?
  2. Jeśli nie za pośrednictwem Graph, czy istnieje podejście API Exchange Online/Microsoft 365 umożliwiające programowe pobieranie informacji o śledzeniu wiadomości dla konkretnej wiadomości (np. na podstawie Internet Message-ID)? 3. W przypadku statusu odczytu/otwarcia: czy istnieje obsługiwana przez API metoda weryfikacji, czy odbiorca odczytał wiadomość e-mail? Jeśli odpowiedź zależy od potwierdzeń odczytu, czy moglibyście Państwo potwierdzić, co można uzyskać za pośrednictwem API (jeśli w ogóle) oraz jakie są ograniczenia/wymagania?

Uwagi/ograniczenia

• Rozumiemy, że potwierdzenie „odczytu” może podlegać kontroli prywatności i nie zawsze jest dostępne.

• Poszukujemy konkretnie obsługiwanego podejścia (nie pikseli śledzących po stronie klienta, ani scrapowania skrzynek pocztowych bez odpowiedniej autoryzacji).

Jeśli to możliwe, prosimy o podanie:

• Odpowiednich linków do dokumentacji i zalecanych punktów końcowych (Graph lub innych interfejsów API Microsoft 365),

• Wymaganych uprawnień/zakresów oraz wszelkich wymagań wstępnych dzierżawcy/administratora,

• Wszelkich istotnych ograniczeń lub zaleceń dotyczących najlepszych praktyk.

Microsoft 365 i pakiet Office | Inne
Komentarze: 0 Brak komentarzy

Odpowiedzi: 3

Sortuj według: Najbardziej pomocne
  1. Steven-N 25,315 Punkty reputacji Pracownicy zewnętrzni firmy Microsoft Moderator
    2026-02-27T14:52:45.5633333+00:00

    Uwaga: Ta odpowiedź została automatycznie przetłumaczona. W rezultacie może zawierać błędy gramatyczne lub niezręczne wyrażenia.

    Cześć Mateusz Tyra - MIRJAN 24

    Dziękujemy za skontaktowanie się z forum Microsoft Q&A.

    Na podstawie przekazanych przez Ciebie informacji przeprowadziłem dodatkowe analizy i poniżej przedstawiam moje stanowisko wobec Twoich pytań wraz z odpowiednią dokumentacją.

    W odniesieniu do pierwszego pytania: Czy istnieje punkt końcowy interfejsu Microsoft Graph API, który zwraca status dostarczenia wiadomości dla każdego odbiorcy?

    Nie. Microsoft Graph nie udostępnia dedykowanego punktu końcowego zapewniającego status dostarczenia wiadomości na poziomie transportu. Chociaż zasób message w Microsoft Graph zawiera właściwość internetMessageId i umożliwia wykonywanie zapytań do skrzynki pocztowej, nie obejmuje on informacji o wyniku dostarczenia, takich jak: dostarczono, niepowodzenie lub opóźnienie, w podziale na poszczególnych odbiorców. Tego typu dane są przechowywane w dziennikach transportu poczty, a nie w samej skrzynce pocztowej.

    Odnosząc się do drugiego pytania: czy istnieje w Exchange Online podejście oparte na API do programowego pobierania informacji o śledzeniu wiadomości?

    Tak. Można użyć Office 365 Reporting Web Service, który zwraca rekordy dostarczenia dla poszczególnych odbiorców, filtrowane według Internet Message-ID:

    GET https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace
    ?$filter=MessageId eq '<your-internet-message-id>'&$format=json
    

    Alternatywnie dostępna jest natywna dla Microsoft Graph metoda getMessageTraceV2 (w wersji beta).

    Dla wiadomości starszych niż 10 dni (do 90 dni) należy użyć polecenia Start-HistoricalSearch w Exchange Online PowerShell.

    Odnośnie do trzeciego pytania: Czy istnieje wspierana metoda API umożliwiająca potwierdzenie, czy odbiorca przeczytał wiadomość?

    Tylko dla odbiorców wewnętrznych: można odpytać ich skrzynkę pocztową za pomocą Microsoft Graph i sprawdzić właściwość isRead, pod warunkiem że aplikacja ma uprawnienie aplikacyjne Mail.Read z zatwierdzoną zgodą administratora. To podejście nie działa dla odbiorców zewnętrznych.

    Potwierdzenia przeczytania (ustawiane przez isReadReceiptRequested) są niewiarygodne, ponieważ większość klientów i tenantów je blokuje lub ignoruje.

    Wymagane uprawnienia:

    Message Trace API: rola Reports Reader lub Exchange Administrator; OAuth 2.0 (client credentials) względem https://outlook.office365.com/.default

    Odczyt isRead przez Graph: uprawnienie aplikacyjne Mail.Read z zgodą administratora tenanta

    Referencje:

    MessageTrace report

    Get-MessageTrace

    Start-HistoricalSearch

    message resource type

    Proszę zauważyć, że zasób podlinkowany w tym wątku jest dostępny wyłącznie w języku angielskim. Szczerze przepraszam za wszelkie niedogodności, jakie może to spowodować dla osób, które wolą lub potrzebują treści w języku polskim. Jeśli potrzebujesz pomocy w zrozumieniu zawartości, zalecam skorzystanie z zaufanego narzędzia lub usługi tłumaczeniowej.


    Jeśli odpowiedź jest pomocna, kliknij ""Akceptuj odpowiedź"" i uprzejmie zagłosuj na nią. Jeśli masz dodatkowe pytania dotyczące tej odpowiedzi, kliknij ""Skomentuj"".

    Uwaga: Prosimy postępować zgodnie z instrukcjami w [naszej dokumentacji], aby włączyć powiadomienia e-mailowe, jeśli chcesz otrzymywać powiązane powiadomienia e-mail dla tego wątku.

    Czy ta odpowiedź była pomocna?

    1 osoba uznała tę odpowiedź za pomocną.

  2. Mateusz Tyra - MIRJAN 24 0 Punkty reputacji
    2026-03-24T07:54:17.25+00:00

    Hello,

    I am experiencing an issue while using the Microsoft Graph Message Trace API, specifically with pagination using the @odata.nextLink.

    Here is the scenario:

    I execute the initial request: https://graph.microsoft.com/v1.0/admin/exchange/tracing/messageTraces?$filter=receivedDateTime ge 2026-03-23T11:56:12Z and receivedDateTime le 2026-03-23T13:56:15Z

    The request returns valid results along with an @odata.nextLink.

    According to the documentation, I should use the entire @odata.nextLink URL to retrieve the next page. However, when I execute the nextLink request, I receive the following error:

    {

    "error": {

    "code": "BadRequest",
    
    "message": "Cannot process argument transformation on parameter 'StartDate'. Cannot convert value \"\"2026-03-23T12:13:08.0000000Z\"\" to type \"System.Nullable`1[System.DateTime]\". Error: \"String '\"2026-03-23T12:13:08.0000000Z\"' was not recognized as a valid DateTime.\""
    

    }

    }
    It appears that the datetime value inside the $skiptoken is incorrectly encoded (extra quotation marks are present), which causes the API to fail when parsing it in the subsequent request.

    According to the official documentation:

    The full @odata.nextLink URL should be used directly.

    The $skiptoken should not be extracted or modified.

    Given this, it seems that the issue might be on the API side, where the skip token is generated incorrectly and cannot be parsed on the next request.

    Could you please verify whether this is a known issue or advise on a possible workaround?

    Thank you in advance for your help.

    Best regards,

    Czy ta odpowiedź była pomocna?


  3. Mateusz Tyra - MIRJAN 24 0 Punkty reputacji
    2026-03-11T09:56:51.87+00:00

    Hi,
    Do you have any additional information on this matter?

    Czy ta odpowiedź była pomocna?


Twoja odpowiedź

Odpowiedzi mogą być oznaczone jako „Zaakceptowane” przez autora pytań i „Proponowane” przez moderatorów, co pomaga użytkownikom poznać odpowiedź rozwiązującą problem autora.