24 september 2026 16 min lästid

MailHeaderAnalyzer: analysera e-posthuvuden i PowerShell utan nätverksåtkomst

Referens för PowerShell-modulen MailHeaderAnalyzer: parameteröversikt, syntax, beskrivning, exempel och parameteregenskaper för Get-MailHeaderAnalysis och ConvertTo-MailHeaderReport, samt utdataobjektet med leveranskedja, autentiseringsresultat, Exchange Online-klassificering och alla Finding-koder.

MailHeaderAnalyzer är en PowerShell-modul med två cmdlets. Get-MailHeaderAnalysis analyserar huvudet i ett e-postmeddelande: leveranskedjan med fördröjningar och TLS-information, SPF-, DKIM-, DMARC- och ARC-resultat inklusive kontroll av om resultaten kommer från den mottagande servern, DMARC-alignment, hybridklassificeringen i Exchange Online, bedömningarna från Microsoft Defender, SpamAssassin och Rspamd samt avvikelser som dubbla From-rader eller Unicode-styrtecken. ConvertTo-MailHeaderReport skapar en rapport för ärenden utifrån detta. Modulen arbetar helt offline: inga DNS-frågor, inga HTTP-anslutningar. Den är kommandoradsversionen av Header Analyzer på denna webbplats och använder samma analyslogik.

ModulMailHeaderAnalyzer i PowerShell Gallery
Källkodpfstr/MailHeaderAnalyzer på GitHub, MIT-licens
Gäller förWindows PowerShell 5.1, PowerShell 7.x; Windows, Linux, macOS; Exchange Management Shell
CmdletsGet-MailHeaderAnalysis, ConvertTo-MailHeaderReport

Parameteröversikt

CmdletParameterTypObligatoriskPipelineEffekt
Get-MailHeaderAnalysis-HeaderString[]Ja (parameteruppsättning Text)Ja, efter värdeHuvudet som text. Rader från pipelinen sammanfogas till ett huvud
Get-MailHeaderAnalysis-PathString[]Ja (parameteruppsättning Path)Ja, efter egenskapsnamnFil med huvudet eller ett fullständigt .eml-meddelande; tar emot objekt från Get-ChildItem
Get-MailHeaderAnalysis-FromClipboardSwitchJa (parameteruppsättning Clipboard)NejLäser huvudet från urklipp (endast Windows)
ConvertTo-MailHeaderReport-AnalysisMailHeaderAnalyzer.AnalysisJaJa, efter värdeResultatobjektet från Get-MailHeaderAnalysis
ConvertTo-MailHeaderReport-FormatStringNejNejMarkdown (standard) eller Text

Båda cmdlets stöder Common Parameters -Verbose, -ErrorAction, -ErrorVariable, -OutVariable och de övriga från about_CommonParameters.

Installation

Install-Module -Name MailHeaderAnalyzer -Scope CurrentUser
AlternativEffekt
-Name MailHeaderAnalyzerModulens namn i PowerShell Gallery
-Scope CurrentUserInstallerar i användarens modulkatalog, utan administratörsbehörighet

På ett system utan internetåtkomst laddar du ned modulen på en annan dator med Save-Module -Name MailHeaderAnalyzer -Path C:\Temp och kopierar mappen MailHeaderAnalyzer till en katalog från $env:PSModulePath, till exempel %USERPROFILE%\Documents\WindowsPowerShell\Modules (Windows PowerShell 5.1) eller %USERPROFILE%\Documents\PowerShell\Modules (PowerShell 7). Uppdateringar hämtas med Update-Module -Name MailHeaderAnalyzer, och den installerade versionen visas med Get-Module -Name MailHeaderAnalyzer -ListAvailable.

Get-MailHeaderAnalysis

Analyserar huvudet i ett e-postmeddelande och returnerar ett analysobjekt.

Syntax

Text (standard)

Get-MailHeaderAnalysis
    [-Header] <String[]>
    [<CommonParameters>]

Path

Get-MailHeaderAnalysis
    -Path <String[]>
    [<CommonParameters>]

Clipboard

Get-MailHeaderAnalysis
    -FromClipboard
    [<CommonParameters>]

Beskrivning

Cmdleten delar upp råhuvudet i fält, vecklar ut RFC 5322-radbrytningar och avkodar RFC 2047-värden i ämne och adresser. Från Received-raderna bygger den leveranskedjan i kronologisk ordning, beräknar fördröjningen per station och läser TLS-version, chiffer och protokollklass enligt RFC 3848. Från Authentication-Results, Received-SPF, DKIM-Signature och ARC-kedjan fastställer den autentiseringsresultaten och kontrollerar om granskningsraden verkligen kommer från en station i leveranskedjan (RFC 8601, avsnitt 5). Därutöver kommer DMARC-alignment, hybridklassificeringen i Exchange Online, spamfilterbedömningarna och en lista över avvikelser.

Cmdleten utför inga DNS-frågor och öppnar ingen nätverksanslutning. Spf, Dkim och Dmarc är därför alltid den mottagande serverns bedömning, kompletterad med en kontroll av om bedömningen kommer från den.

Indata läses tolerant: En tom rad avslutar huvudet och efterföljande meddelandetext ignoreras. Rader utan fältnamn och utan inledande blanksteg, som uppstår vid kopiering från klientdialoger, hör till föregående fält. En mbox-avgränsningsrad From ... före det första fältet hoppas över och en Byte Order Mark tas bort. Högst 200 Received-rader analyseras, räknat från leveransen.

Exempel

Exempel 1

Get-MailHeaderAnalysis -FromClipboard

Analyserar huvudet som finns i urklipp. I Outlook för Windows hittar du huvudet under Arkiv, Egenskaper, Internetheaders; i Outlook på webben under meddelandealternativen, i ”Visa meddelandeinformation”.

Subject     : Service-Report für März
From        : Beispiel Newsletter <[email protected]>
Date        : 2026-08-03 09:14:27Z
SPF         : pass
DKIM        : pass
DMARC       : pass
ARC         : -
CompAuth    : pass (reason 100)
AuthTrust   : Absent (no authserv-id, Microsoft 365 style)
Hops        : 3 (total 00:00:42)
DeliveredBy : zr0p278mb0570.chep278.prod.outlook.com
Findings    : none

Exempel 2

Get-MailHeaderAnalysis -Path .\nachricht.eml

Analyserar ett sparat meddelande. Filen får innehålla enbart huvudet eller hela meddelandet; meddelandetexten ignoreras.

Exempel 3

(Get-MailHeaderAnalysis -Path .\nachricht.eml).Hops

Visar leveranskedjan som tabell, med första hoppet först.

#   From                 IP              By                                     Protocol   TLS      Time (UTC)           Delay
-   ----                 --              --                                     --------   ---      ----------           -----
1   client.example.net   198.51.100.34   mail.example.org                       ESMTPSA    -        2026-08-03 09:14:28  -
2   mail.example.org     203.0.113.25    mx.eur02.prod.protection.outlook.com   Microsoft… TLS 1.3  2026-08-03 09:15:09  41 s
3   AM0EUR02FT056.eop…   -               ZR0P278MB0570.CHEP278.PROD.OUTLOOK.COM Microsoft… TLS 1.2  2026-08-03 09:15:10  1 s

Exempel 4

Get-Content -Path .\header.txt | Get-MailHeaderAnalysis | Select-Object -ExpandProperty Findings

Läser huvudet rad för rad från en textfil och visar bara avvikelserna. -Raw vid Get-Content behövs inte, eftersom cmdleten själv sammanfogar raderna.

Exempel 5

Get-ChildItem -Path .\export\*.eml |
    Get-MailHeaderAnalysis |
    Select-Object Source, Subject, Spf, Dkim, Dmarc, AuthTrust, HopCount,
        @{ Name = 'Findings'; Expression = { ($_.Findings.Code | Sort-Object -Unique) -join ',' } } |
    Export-Csv -Path .\auswertung.csv -NoTypeInformation -Encoding UTF8

Analyserar alla meddelanden i en mapp och skriver en CSV-fil med en rad per meddelande. Den beräknade kolumnen sammanfattar Finding-koderna.

AlternativEffekt
Get-ChildItem -Path .\export\*.emlReturnerar filobjekten; -Path tar över deras egenskap FullName
Select-Object … @{ Name; Expression }Beräknad kolumn som sammanfattar alla Finding-koder till en sträng
Export-Csv -NoTypeInformation -Encoding UTF8CSV utan typrubrikrad, UTF-8 för diakritiska tecken i ämnesrader

Exempel 6

Get-ChildItem .\export\*.eml |
    Get-MailHeaderAnalysis |
    Where-Object AuthTrust -eq 'Unmatched' |
    Select-Object Source, AuthServId, DeliveredBy

Listar meddelanden vars Authentication-Results-rad inte kommer från det levererande systemet. Vid phishinganalyser är detta ett snabbt första filter.

Exempel 7

$a = Get-MailHeaderAnalysis -Path .\nachricht.eml
$a.Hops[$a.SlowestHopIndex - 1] | Format-List Index, FromHost, ByHost, Delay

Visar stationen med den största fördröjningen. SlowestHopIndex är 1-baserad, arrayen Hops är 0-baserad.

Exempel 8

Get-MailHeaderAnalysis -Path .\nachricht.eml | ConvertTo-Json -Depth 6 | Set-Content .\analyse.json

Skriver hela analysen som JSON. -Depth 6 behövs eftersom Hops, DkimSignatures och Exchange är kapslade objekt; standardvärdet 2 skulle bara visa dem som typnamn.

Parametrar

-Header

Huvudet som text. Parametern tar emot en enskild sträng med hela huvudet eller flera strängar; pipelineindata samlas in och sammanfogas till ett huvud i slutet, därför fungerar Get-Content datei | Get-MailHeaderAnalysis utan -Raw. Om flera huvuden ska analyseras separat använder du -Path med flera filer.

Alias: Text, Raw, InputObject

ParameteregenskapVärde
TypString[]
StandardvärdeInget
Jokertecken stödsNej
Parameteruppsättning TextVärde
Position0
ObligatoriskJa
Värde från pipelineJa
Värde från pipeline efter egenskapsnamnNej

-Path

Sökväg till en fil som innehåller huvudet eller ett fullständigt .eml-meddelande. Relativa sökvägar löses mot den aktuella katalogen. Filen läses med [System.IO.File]::ReadAllText: en Byte Order Mark beaktas, utan BOM används UTF-8. Varje fil ger ett eget resultatobjekt; saknade filer ger ett icke-avslutande fel.

Alias: FullName, PSPath, LiteralPath

ParameteregenskapVärde
TypString[]
StandardvärdeInget
Jokertecken stödsNej
Parameteruppsättning PathVärde
PositionNamngiven
ObligatoriskJa
Värde från pipelineNej
Värde från pipeline efter egenskapsnamnJa

-FromClipboard

Läser huvudet från urklipp med Get-Clipboard -Raw. Parametern är endast tillgänglig i Windows; på Linux och macOS avslutas cmdleten med ett felmeddelande, likaså om urklipp är tomt.

ParameteregenskapVärde
TypSwitchParameter
StandardvärdeFalse
Jokertecken stödsNej
Parameteruppsättning ClipboardVärde
PositionNamngiven
ObligatoriskJa
Värde från pipelineNej
Värde från pipeline efter egenskapsnamnNej

Indata

System.String: huvudrader eller hela huvudet, till -Header.

System.IO.FileInfo: filobjekt från Get-ChildItem, vars FullName binds till -Path.

Utdata

MailHeaderAnalyzer.Analysis: ett objekt per analyserat huvud. Egenskaperna beskrivs i avsnittet Utdataobjekt.

Anmärkningar

Analysetexten (förklaringar i Findings, CompAuthReasonMeaning och betydelsefälten) är på engelska för att kunna användas oförändrad i internationella ärenden. Utdata i standardvyn kan visas helt med Format-List *.

ConvertTo-MailHeaderReport

Skapar en rapport som Markdown eller text från ett analysobjekt.

Syntax

ConvertTo-MailHeaderReport
    [-Analysis] <Object>
    [-Format <String>]
    [<CommonParameters>]

Beskrivning

Rapporten omfattar ämne, avsändare, datum och Message-ID, autentiseringsresultaten med ursprungsangivelse och alignment, alla Findings, leveranskedjan, Exchange-klassificeringen och spamfiltrens värden. Unicode-styrtecken för skrivriktning förblir synliga i rapporten som <U+...>, så att de inte hamnar i ett ärendesystem via rapporten. Den sista raden anger modulversionen.

Exempel

Exempel 1

Get-MailHeaderAnalysis -Path .\nachricht.eml | ConvertTo-MailHeaderReport | Set-Clipboard

Skapar en Markdown-rapport och lägger den i urklipp.

# Email header analysis

- Subject: Service-Report für März
- From: Beispiel Newsletter <[email protected]>
- Date: 2026-08-03T09:14:27Z
- Message-ID: <[email protected]>

## Authentication

- spf: pass
- dkim: pass
- dmarc: pass
- compauth: pass (reason=100: passed authentication)
- Results without authserv-id (Microsoft 365 style)
- DMARC alignment: SPF Strict, DKIM Strict

## Delivery chain (total: 42 s)

| # | From | By | Protocol | TLS | Time (UTC) | Delay |
|---|---|---|---|---|---|---|
| 1 | client.example.net (198.51.100.34) | mail.example.org | ESMTPSA | - | 2026-08-03T09:14:28Z | - |
| 2 | mail.example.org (203.0.113.25) | mx.eur02.prod.protection.outlook.com | Microsoft SMTP Server | TLS 1.3 | 2026-08-03T09:15:09Z | 41 s |
| 3 | AM0EUR02FT056.eop-EUR02.prod.protection.outlook.com | ZR0P278MB0570.CHEP278.PROD.OUTLOOK.COM | Microsoft SMTP Server | TLS 1.2 | 2026-08-03T09:15:10Z | 1 s |

Exempel 2

Get-MailHeaderAnalysis -FromClipboard | ConvertTo-MailHeaderReport -Format Text

Ger ut rapporten som text utan Markdown-formatering, till exempel för e-post eller konsolloggar.

Exempel 3

Import-Module MailHeaderAnalyzer
Get-MailHeaderAnalysis -Path 'C:\Temp\bounce.eml' | ConvertTo-MailHeaderReport -Format Text

Användning i Exchange Management Shell. Om $env:PSModulePath där begränsas av grupprinciper, läser du in modulen med Import-Module och den fullständiga sökvägen till filen .psd1.

Parametrar

-Analysis

Analysobjektet från Get-MailHeaderAnalysis. Andra objekttyper avvisas av cmdleten med ett bindningsfel.

ParameteregenskapVärde
TypMailHeaderAnalyzer.Analysis
StandardvärdeInget
Jokertecken stödsNej
Parameteruppsättning (alla)Värde
Position0
ObligatoriskJa
Värde från pipelineJa
Värde från pipeline efter egenskapsnamnNej

-Format

Utdataformatet. Giltiga värden:

  • Markdown: rubriker, punktlistor och leveranskedjan som tabell. Standard.
  • Text: rubriker med versaler, indragna rader, leveranskedjan som numrerad lista.
ParameteregenskapVärde
TypString
Tillåtna värdenMarkdown, Text
StandardvärdeMarkdown
Jokertecken stödsNej
Parameteruppsättning (alla)Värde
PositionNamngiven
ObligatoriskNej
Värde från pipelineNej
Värde från pipeline efter egenskapsnamnNej

Indata

MailHeaderAnalyzer.Analysis: resultatet från Get-MailHeaderAnalysis.

Utdata

System.String: rapporten, en sträng per analysobjekt.

Utdataobjekt

Get-MailHeaderAnalysis returnerar ett objekt av typen MailHeaderAnalyzer.Analysis per indata. Standardvyn visar sammanfattningen från exempel 1; alla egenskaper är tillgängliga via Select-Object, Format-List * eller ConvertTo-Json.

MailHeaderAnalyzer.Analysis

EgenskapTypInnehåll
SourceStringFilsökväg, Clipboard eller Text
SubjectStringÄmne, RFC 2047-avkodat
From, ReplyTo, ReturnPathAdressobjektName, Address, Domain, Display; $null om fältet saknas
DateDateTime (UTC)Värdet i fältet Date
MessageIdStringMessage-ID
MailFromDomainStringEnvelope-avsändardomän från smtp.mailfrom i SPF-kontrollen, annars från Return-Path
Spf, Dkim, Dmarc, Arc, CompAuthStringResultat enligt den relevanta Authentication-Results-raden (pass, fail, none, softfail med flera); $null om det inte har kontrollerats
CompAuthReason, CompAuthReasonMeaningStringReason-kod för sammansatt autentisering från Microsoft 365 och dess betydelse
AuthTrustStringMatched, Unmatched, Absent eller None, se AuthTrust
AuthServIdStringauthserv-id för den relevanta granskningsraden
AuthenticationResultsObjekt[]Alla Authentication-Results-rader med AuthServId, Methods, Trust, Raw
ReceivedSpfObjektReceived-SPF-raden med Result och Properties
SpfAlignment, DkimAlignmentStringStrict, Relaxed, None eller $null
HopsHop[]Leveranskedja i kronologisk ordning, se Hop-objekt
HopCount, TotalDuration, SlowestHopIndex, HasClockSkewInt, TimeSpan, Int, BoolNyckeltal för kedjan
DeliveredByStringby-värden för den senaste Received-raden, alltså den levererande stationen
DkimSignaturesObjekt[]Per signatur Domain, Selector, Algorithm, Canonicalization, SignedHeaders, BodyLength, Timestamp, Expires, ReceiverResult, Tags
ArcChain, ArcValidObjekt[], BoolARC-instanser med Instance, SealDomain, ChainValidation, Methods; ArcValid är $null utan ARC-kedja
ExchangeObjektHybridklassificering i Exchange Online, se Exchange-objekt; $null utan motsvarande huvuden
SpamObjektSpamfilterbedömningar, se Spam-objekt; $null utan motsvarande huvuden
ListObjektListId, Unsubscribe, OneClick (RFC 8058); $null utan listheaders
FindingsFinding[]Avvikelser med Severity, Code, Message, se Findings
FieldsObjekt[]Alla fält med Name, Value (utvecklat) och Raw
HadBodyBoolOm meddelandetext följde efter huvudet

MailHeaderAnalyzer.Hop

Varje post i Hops motsvarar en Received-rad. Ordningen är kronologisk, alltså omvänd mot ordningen i huvudet.

EgenskapInnehåll
IndexLöpnummer, 1 = inlämning
FromHost, Helo, ReverseDns, IPAddress, IsPrivateIPUppgifter om det inlämnande systemet från from-delen; IP-adressen kommer från hakparentesen i kommentaren, rDNS-namnet från kommentaren före den
ByHost, SoftwareMottagande system och dess programvara (kommentar efter by)
Protocol, ProtocolClasswith-värde och klass enligt RFC 3848: TlsAuthenticated (ESMTPSA), Tls (ESMTPS eller TLS-information finns), Authenticated (ESMTPA), Plain, Http, Mapi, Local
TlsVersion, TlsCipherFrån skrivsätten hos Microsoft (version=TLS1_2, cipher=…), Postfix (using TLSv1.3 with cipher …) och Exim
Id, For, ViaAndra Received-komponenter
DateTidsstämpel efter semikolon, UTC
DelayTimeSpan till föregående hopp; negativ vid klockavvikelse
ProviderIdentifierad leverantör eller gateway utifrån värdnamnen (Microsoft 365, Google Workspace, SEPPmail, HIN, Proofpoint, Mimecast med flera)
Attested$true endast vid sista hoppet: enbart denna rad har skrivits av det mottagande systemet självt, alla rader nedanför fanns redan i meddelandet
RawOriginalraden

AuthTrust: granskningsresultatens ursprung

En Authentication-Results-rad kan vilken avsändare som helst själv skriva in i ett meddelande. Enligt RFC 8601, avsnitt 5, är endast raden från den mottagande organisationen relevant, och dess authserv-id måste kunna kopplas till en station i leveranskedjan. Cmdleten jämför authserv-id för varje rad med by-värdarna i Received-kedjan (samma domän eller subdomän, alltid vid punktgränsen, ingen delsträng).

VärdeBetydelse
Matchedauthserv-id förekommer som by-värd i kedjan. Endast sådana rader ingår i Spf, Dkim, Dmarc så snart minst en finns
Unmatchedauthserv-id förekommer inte i kedjan. Resultaten visas men räknas som ett obekräftat påstående; Finding AuthUnverified anger detta
AbsentRaden saknar authserv-id. Microsoft 365 skriver sin granskningsrad i denna form, direkt inledd med spf=
NoneIngen granskningsrad finns

Om huvudet innehåller granskningsrader från flera ursprung rapporterar Finding AuthMixedOrigins detta. Saknas en granskningsrad men finns en Received-SPF-rad, tas dess resultat över som Spf och märks med ReceivedSpfOnly.

DMARC-alignment

SpfAlignment jämför envelope-avsändardomänen med From-domänen, DkimAlignment jämför d=-domänen för den granskade signaturen med From-domänen. Strict betyder identisk domän, Relaxed samma organisationsdomän och None ingen överensstämmelse. Organisationsdomänen fastställs heuristiskt: de två sista etiketterna, eller de tre sista vid kända sammansatta ändelser som co.uk eller com.au. En fullständig Public Suffix List ingår inte.

MailHeaderAnalyzer.ExchangeClassification

Om huvudet innehåller fälten X-MS-Exchange-Organization-*, X-OriginatorOrg eller X-MS-Exchange-CrossTenant-*, fyller cmdleten egenskapen Exchange. Betydelserna följer Exchange-teamets artikel ”Demystifying hybrid mail flow”; bakgrunden beskrivs i artikeln Exchange-hybridheaders: interna eller externa?.

EgenskapInnehåll
Directionality, DirectionalityMeaningOriginating eller Incoming med förklaring
AuthAs, AuthAsMeaningInternal eller Anonymous med följderna för EOP-filtrering
AuthSourceServer som gjorde klassificeringen
AuthMechanism, AuthMechanismMeaningMekanismkod. Endast värdet 10 (Externally Secured) är offentligt dokumenterat; för alla andra koder anger modulen uttryckligen att Microsoft inte dokumenterar dem
OriginatorOrgStandardsdomän för den sändande klientorganisationen, den oförfalskbara klientorganisationsmarkören vid mottagning från Microsoft 365
CrossTenantAuthAs, CrossTenantAuthSource, CrossTenantIdKlassificering och klientorganisations-ID vid klientorganisationsgränsen
CrossTenantFromEntity, CrossTenantFromMeaningInternet, Hosted eller HybridOnPrem med förklaring
WrongTenantAttributionVärdet från X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp om meddelandet har tilldelats en främmande klientorganisation
OrganizationHeadersPreserved, CrossPremisesHeadersFilteredMarkörer för mottagna respektive av sändningsanslutningen borttagna organisationsheaders

MailHeaderAnalyzer.SpamAssessment

Egenskapen Spam sammanfattar bedömningarna från de kända filtren. Värdena kommer från externa system och avkodas, men bedöms inte.

EgenskapKällaInnehåll
Scl, SclMeaningX-Forefront-Antispam-Report, X-Microsoft-AntispamSpam Confidence Level med betydelse (-1 betrodd, 0/1 inte spam, 5/6 misstänkt spam, 9 mycket sannolikt spam)
BclX-Microsoft-AntispamBulk Complaint Level 0 till 9
Category, CategoryMeaningCAT:Klassificeringar som SPM, PHSH, HPHSH, MALW, SPOOF, DIMP, UIMP, BULK
SpamFilterVerdict, SpamFilterMeaningSFV:Filterresultat som NSPM, SPM, SKA (allowlist), SKI (inom organisationen)
IPVerdict, IPVerdictMeaningIPV:CAL (IP på anslutningsallowlist) eller NLI (inget rykte)
Direction, DirectionMeaningDIR:INB, OUT, INT
ConnectingIP, CountryCIP:, CTRY:Inlämnande IP och ursprungsland
ForefrontX-Forefront-Antispam-ReportAlla nyckel/värde-par i fältet
SpamAssassinScore, SpamAssassinTestsX-Spam-StatusPoäng och utlösta tester
RspamdSymbolsX-Spamd-Result, X-Spam-ReportSymboler med poäng

Den fullständiga listan över compauth-Reason-koder finns i artikeln Microsoft 365 compauth: Reason-koder.

Findings

Cmdleten returnerar avvikelser som objekt i Findings, var och en med Severity (Info, Warning, Fail), en stabil Code för filter och skript samt en förklaring i Message.

KodAllvarlighetsgradBetydelse
DuplicateFieldWarningEtt fält som RFC 5322 begränsar till en instans (From, Subject, Date, Message-ID med flera) förekommer flera gånger. E-postklienter och filter kan välja olika instanser; ett känt mönster vid förfalskningar
BidiControlsWarningUnicode-styrtecken för skrivriktning i ett fält. De vänder läsriktningen, fdp.exe visas då som exe.pdf. Modulen visar dem som <U+202E>
HopOverflowWarningFler än 200 Received-rader; de överskjutande analyserades inte
AuthUnverifiedWarningGranskningsresultaten har ett authserv-id som inte förekommer i leveranskedjan
AuthMixedOriginsWarningGranskningsrader från flera ursprung finns
ReceivedSpfForeignWarningreceiver= i Received-SPF-raden förekommer inte i kedjan
ReceivedSpfOnlyInfoSPF-resultatet kommer endast från Received-SPF, inte från en granskningsrad
NoAuthResultsInfoInga granskningsresultat i huvudet
DmarcFailFailDMARC misslyckades enligt den mottagande servern
SpfNotPassWarningSPF-resultat fail, softfail, permerror eller temperror
DkimNotPassWarningDKIM-resultat fail, permerror eller temperror utan ARC-vittne
DkimBrokenAfterForwardInfoDKIM misslyckades hos mottagaren, men ett ARC-sigill från samma domän intygar en tidigare giltig signatur: typiskt för vidarebefordringar och e-postlistor
DkimWeakHashWarningSignatur med rsa-sha1 (RFC 8301 klassar SHA-1 som föråldrat)
DkimBodyLengthWarningTaggen l= begränsar den signerade längden på meddelandetexten; bifogat innehåll omfattas inte
DkimExpiredWarningTidpunkten x= ligger i det förflutna
DkimFromUnsignedWarningFältet From ingår inte i h=, trots att RFC 6376 kräver det
ClockSkewInfoEtt hopp har en tidigare tidsstämpel än sin föregångare; fördröjningarna är endast uppskattningar
ReplyToMismatchInfoDomänen Reply-To skiljer sig från domänen From; vanligt i nyhetsbrev, ett mönster vid phishing
SpfNotAlignedInfoEnvelope-avsändardomänen och domänen From tillhör olika organisationer; SPF bidrar då inte till DMARC
ExchangeWrongTenantWarningMeddelandet tilldelades en främmande klientorganisation; en klassisk orsak är en inbound-anslutning från en annan klientorganisation med samma certifikat eller IP-adresser
ExchangeHeadersFilteredWarningSändningsanslutningen har tagit bort Cross-Premises-headers (KB3212872)
ExchangeExternallySecuredWarningAuthMechanism 10: inkommande via en mottagningsanslutning med ”Externally Secured”, EOP-filtrering har hoppats över
SpamCategoryWarningMicrosoft har tilldelat en annan kategori än NONE
SpamConfidenceWarningSCL 5 eller högre

Funktion och begränsningar

Modulen läser vad som står i huvudet och drar slutsatser om vad som kan beläggas utan externa frågor. Detta medför vissa begränsningar:

  • Ingen kryptografisk kontroll. DKIM-signaturer räknas inte om och DNS-poster frågas inte efter. Spf, Dkim och Dmarc är alltid den mottagande serverns bedömning, kompletterad med kontrollen av om den bedömningen faktiskt kommer från den.
  • Endast den sista Received-raden är styrkt. Alla rader under den följde med från avsändaren och kan utformas godtyckligt. Attested markerar skillnaden; fördröjningarna för tidigare hopp bygger på uppgifterna i dessa rader.
  • Organisationsdomäner fastställs heuristiskt. För relaxed alignment använder modulen en kort lista med sammansatta ändelser, inte en fullständig Public Suffix List.
  • AuthMechanism är endast delvis dokumenterat. Utöver värdet 10 har Microsoft inte publicerat koderna; modulen hittar inte på några betydelser.
  • Teckenkodningar. RFC 2047-värden avkodas med de kodningar som .NET känner till på respektive system. Okända teckenkodningar lämnas oförändrade.

Dataskydd

Ett komplett huvud innehåller interna värdnamn, IP-adresser, avsändare, mottagare och ämne. Varför dessa uppgifter inte hör hemma i ett onlineverktyg beskrivs i artikeln Analysera e-posthuvuden utan att ladda upp e-postmeddelandet. För modulen gäller samma löfte som för webbläsarversionen: inga nätverksanrop. Modulens testsvit innehåller ett test som misslyckas så snart en nätverks- eller DNS-cmdlet förekommer i källkoden.

Källkod och versioner

Källkoden finns under MIT-licens på GitHub. Analyslogiken är en portering av biblioteket som också används av Header Analyzer på denna webbplats; båda delar testfallen. Continuous Integration kontrollerar varje ändring med PSScriptAnalyzer och Pester i Windows PowerShell 5.1, PowerShell 7 på Windows, Ubuntu och macOS. Publiceringar i PowerShell Gallery sker automatiskt från versionerade taggar; ändringarna per version finns i Changelog.

Fel och önskemål om utökningar tar jag emot som Issue på GitHub. Anonymisera testhuvuden för felrapporter i förväg; de medföljande testfallen använder endast exempeldomäner enligt RFC 2606 och adresser enligt RFC 5737.

Källor

  1. MailHeaderAnalyzer i PowerShell Gallery

    paketsida med installationskommando och versionshistorik.

    https://www.powershellgallery.com/packages/MailHeaderAnalyzer
  2. pfstr/MailHeaderAnalyzer på GitHub

    källkod, testsvit, Changelog och Issues.

    https://github.com/pfstr/MailHeaderAnalyzer
  3. Microsoft Learn: Get-MessageTraceV2

    mall för strukturen i denna referens (syntax, beskrivning, exempel, parameteregenskaper).

    https://learn.microsoft.com/en-us/powershell/module/exchangepowershell/get-messagetracev2?view=exchange-ps
  4. RFC 8601: Message Header Field for Indicating Message Authentication Status

    struktur för Authentication-Results och regeln att endast raden från den mottagande organisationen är relevant (avsnitt 5).

    https://www.rfc-editor.org/rfc/rfc8601
  5. RFC 5321: Simple Mail Transfer Protocol

    struktur för Received-rader och rekommendationen om en övre gräns som skydd mot slingor (avsnitt 6.3).

    https://www.rfc-editor.org/rfc/rfc5321
  6. RFC 3848: ESMTP and LMTP Transmission Types Registration

    with-värdena ESMTPS, ESMTPA och ESMTPSA.

    https://www.rfc-editor.org/rfc/rfc3848
  7. RFC 6376: DomainKeys Identified Mail (DKIM) Signatures

    taggar för DKIM-Signature, krav på signering av From.

    https://www.rfc-editor.org/rfc/rfc6376
  8. RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM

    klassificering av rsa-sha1 som föråldrat.

    https://www.rfc-editor.org/rfc/rfc8301
  9. RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC)

    Strict och Relaxed Alignment.

    https://www.rfc-editor.org/rfc/rfc7489
  10. RFC 8617: The Authenticated Received Chain (ARC) Protocol

    ARC-Seal, ARC-Authentication-Results och kedjekontrollen cv=.

    https://www.rfc-editor.org/rfc/rfc8617
  11. Microsoft Learn: Anti-spam message headers in Microsoft 365

    betydelsen av SCL, BCL, CAT, SFV, IPV och compauth-Reason-koderna.

    https://learn.microsoft.com/en-us/defender-office-365/message-headers-eop-mdo
  12. Exchange Team Blog: Demystifying hybrid mail flow

    ursprunget till betydelserna för MessageDirectionality, AuthAs och AuthMechanism.

    https://techcommunity.microsoft.com/blog/exchange/demystifying-hybrid-mail-flow-when-is-a-message-internal/1420838
  13. Header Analyzer på rafaelpfister.ch

    webbläsarversionen med samma analyslogik.

    https://rafaelpfister.ch/tools/header-analyzer

Kommentarer

Kommentarerna hämtas från GitHub / Giscus.