24. september 2026 16 min lesetid

MailHeaderAnalyzer: analyser e-posthoder i PowerShell uten nettverkstilgang

Referanse for PowerShell-modulen MailHeaderAnalyzer: parameteroversikt, syntaks, beskrivelse, eksempler og parameterattributter for Get-MailHeaderAnalysis og ConvertTo-MailHeaderReport, samt utdataobjektet med leveringskjede, autentiseringsresultater, Exchange Online-klassifisering og alle funnkoder.

MailHeaderAnalyzer er en PowerShell-modul med to cmdleter. Get-MailHeaderAnalysis analyserer hodet til en e-post: leveringskjeden med forsinkelser og TLS-informasjon, SPF-, DKIM-, DMARC- og ARC-resultater inkludert opprinnelseskontroll mot authserv-id-en til gatewayen din, DMARC-alignment, hybridklassifiseringen til Exchange Online, vurderingene fra Microsoft Defender, SpamAssassin og Rspamd samt avvik som doble From-linjer eller Unicode-kontrolltegn. ConvertTo-MailHeaderReport oppretter en rapport for saker. Modulen arbeider helt offline: ingen DNS-oppslag, ingen HTTP-forbindelser. Den er kommandolinjeversjonen av Header Analyzer på dette nettstedet og bruker samme analyselogikk.

ModulMailHeaderAnalyzer i PowerShell Gallery
Kildekodepfstr/MailHeaderAnalyzer på GitHub, MIT-lisens
Gjelder forWindows PowerShell 5.1, PowerShell 7.x; Windows, Linux, macOS; Exchange Management Shell
CmdleterGet-MailHeaderAnalysis, ConvertTo-MailHeaderReport

Parameteroversikt

CmdletParameterTypePåkrevdPipelineVirkning
Get-MailHeaderAnalysis-HeaderString[]Ja (parametersett Text)Ja, etter verdiHodet som tekst. Linjer fra pipelinen settes sammen til ett hode
Get-MailHeaderAnalysis-PathString[]Ja (parametersett Path)Ja, etter egenskapsnavnFil med hodet eller en fullstendig .eml-melding; tar imot objekter fra Get-ChildItem
Get-MailHeaderAnalysis-FromClipboardSwitchJa (parametersett Clipboard)NeiLeser hodet fra utklippstavlen (kun Windows)
Get-MailHeaderAnalysis-TrustedAuthServIdString[]NeiNeiauthserv-id(-er) for inngangsgatewayen din; bare kontrollinjer med en av disse ID-ene anses som dokumenterte
ConvertTo-MailHeaderReport-AnalysisMailHeaderAnalyzer.AnalysisJaJa, etter verdiResultatobjektet fra Get-MailHeaderAnalysis
ConvertTo-MailHeaderReport-FormatStringNeiNeiMarkdown (standard) eller Text

Begge cmdletene støtter Common Parameters -Verbose, -ErrorAction, -ErrorVariable, -OutVariable og de øvrige fra about_CommonParameters.

Installasjon

Install-Module -Name MailHeaderAnalyzer -Scope CurrentUser
AlternativVirkning
-Name MailHeaderAnalyzerNavnet på modulen i PowerShell Gallery
-Scope CurrentUserInstallerer i brukerens modulkatalog uten administratorrettigheter

På et system uten internettilgang laster du ned modulen på en annen maskin med Save-Module -Name MailHeaderAnalyzer -Path C:\Temp og kopierer mappen MailHeaderAnalyzer til en katalog fra $env:PSModulePath, for eksempel %USERPROFILE%\Documents\WindowsPowerShell\Modules (Windows PowerShell 5.1) eller %USERPROFILE%\Documents\PowerShell\Modules (PowerShell 7). Oppdateringer hentes med Update-Module -Name MailHeaderAnalyzer, og den installerte versjonen vises med Get-Module -Name MailHeaderAnalyzer -ListAvailable.

Get-MailHeaderAnalysis

Analyserer hodet til en e-post og returnerer et analyseobjekt.

Syntaks

Text (standard)

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

Path

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

Clipboard

Get-MailHeaderAnalysis
    -FromClipboard
    [-TrustedAuthServId <String[]>]
    [<CommonParameters>]

Beskrivelse

Cmdleten deler råhodet inn i felt, folder ut RFC 5322-foldinger og dekoder RFC 2047-verdier i emne og adresser. Fra Received-linjene oppretter den leveringskjeden i kronologisk rekkefølge, beregner forsinkelsen per stasjon og leser TLS-versjon, chiffer og protokollklasse i henhold til RFC 3848. Fra Authentication-Results, Received-SPF, DKIM-Signature og ARC-kjeden fastslår den autentiseringsresultatene og tilordner hver kontrollinje en opprinnelse (RFC 8601, avsnitt 5): dokumentert dersom authserv-id-en finnes i -TrustedAuthServId, ellers bare plausibel eller udokumentert, se AuthTrust. I tillegg kommer DMARC-alignment, hybridklassifiseringen til Exchange Online, vurderingene fra spamfiltrene og en liste over avvik.

Cmdleten utfører ingen DNS-oppslag og åpner ingen nettverksforbindelse. Spf, Dkim, Dmarc og Arc er derfor alltid mottaksserverens vurdering. DKIM- og ARC-signaturer blir ikke kryptografisk verifisert på nytt; for ARC-kjeden kontrollerer cmdleten bare strukturen (ArcStructure).

Inndata leses tolerant: En tom linje avslutter hodet, og påfølgende meldingstekst ignoreres. Linjer uten feltnavn og uten innledende mellomrom, slik de oppstår ved kopiering fra klientdialoger, hører til det foregående feltet. En mbox-skillelinje From ... før det første feltet hoppes over, og en Byte Order Mark fjernes. Høyst 200 Received-linjer analyseres, telt fra leveringen.

Eksempler

Eksempel 1

Get-MailHeaderAnalysis -FromClipboard

Analyserer hodet som ligger på utklippstavlen. I Outlook for Windows finner du hodet under Fil, Egenskaper, Internett-hoder; i Outlook på nettet finner du det i meldingsalternativene under «Vis meldingsdetaljer».

Subject     : Service-Report für März
From        : Beispiel Newsletter <news@example.org>
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

Eksempel 2

Get-MailHeaderAnalysis -Path .\nachricht.eml

Analyserer en lagret melding. Filen kan inneholde bare hodet eller hele meldingen; meldingsteksten ignoreres.

Eksempel 3

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

Viser leveringskjeden som en tabell, med første hopp 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

Eksempel 4

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

Leser hodet linje for linje fra en tekstfil og viser bare avvikene. -Raw med Get-Content er ikke nødvendig; cmdleten setter selv sammen linjene.

Eksempel 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

Analyserer alle meldinger i en mappe og skriver en CSV-fil med én linje per melding. Den beregnede kolonnen sammenfatter funnkodene.

AlternativVirkning
Get-ChildItem -Path .\export\*.emlLeverer filobjektene; -Path overtar egenskapen FullName
Select-Object … @{ Name; Expression }Beregnet kolonne som sammenfatter alle funnkodene til én tekststreng
Export-Csv -NoTypeInformation -Encoding UTF8CSV uten typeoverskrift, UTF-8 for norske tegn i emnelinjer

Eksempel 6

Get-ChildItem .\export\*.eml |
    Get-MailHeaderAnalysis -TrustedAuthServId 'mx.example.org' |
    Where-Object AuthTrust -ne 'Trusted' |
    Select-Object Source, AuthTrust, AuthServId, DeliveredBy

Lister meldinger hvis kontrollresultater ikke kommer fra din egen inngangsgateway mx.example.org. Ved phishing-analyser er dette et første filter. Uten -TrustedAuthServId kan du bare filtrere etter Unmatched; en forfalskning som i tillegg inneholder en passende Received-linje, vises da som Matched og slipper gjennom filteret.

Alternativer forklart
AlternativVirkning
-TrustedAuthServId 'mx.example.org'authserv-id som gatewayen din skriver i Authentication-Results; eksakt sammenligning, uten underdomener
Where-Object AuthTrust -ne 'Trusted'Beholder alle meldinger der den relevante kontrollinjen ikke har en klarert authserv-id
Select-Object Source, AuthTrust, AuthServId, DeliveredByFil, opprinnelsesnivå, authserv-id for kontrollinjen og leverende stasjon

Eksempel 7

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

Viser stasjonen med størst forsinkelse. SlowestHopIndex er 1-basert, mens matrisen Hops er 0-basert.

Eksempel 8

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

Skriver hele analysen som JSON. -Depth 6 er nødvendig fordi Hops, DkimSignatures og Exchange er nestede objekter; standardverdien 2 ville bare vist dem som typenavn.

Parametere

-Header

Hodet som tekst. Parameteren tar imot én enkelt streng med hele hodet eller flere strenger; pipeline-inndata samles og settes sammen til ett hode til slutt, derfor fungerer Get-Content datei | Get-MailHeaderAnalysis uten -Raw. Hvis flere hoder skal analyseres separat, bruker du -Path med flere filer.

Aliaser: Text, Raw, InputObject

ParameteregenskapVerdi
TypeString[]
StandardverdiIngen
Støtter jokertegnNei
Parametersett TextVerdi
Posisjon0
PåkrevdJa
Verdi fra pipelineJa
Verdi fra pipeline etter egenskapsnavnNei

-Path

Sti til en fil som inneholder hodet eller en fullstendig .eml-melding. Relative stier løses opp mot gjeldende katalog. Filen leses med [System.IO.File]::ReadAllText: En Byte Order Mark tas hensyn til, og uten BOM brukes UTF-8. Det opprettes et eget resultatobjekt for hver fil; manglende filer gir en ikke-terminerende feil.

Aliaser: FullName, PSPath, LiteralPath

ParameteregenskapVerdi
TypeString[]
StandardverdiIngen
Støtter jokertegnNei
Parametersett PathVerdi
PosisjonNavngitt
PåkrevdJa
Verdi fra pipelineNei
Verdi fra pipeline etter egenskapsnavnJa

-FromClipboard

Leser hodet fra utklippstavlen med Get-Clipboard -Raw. Parameteren er bare tilgjengelig i Windows; på Linux og macOS avslutter cmdleten med en feilmelding, det samme gjelder ved tom utklippstavle.

ParameteregenskapVerdi
TypeSwitchParameter
StandardverdiFalse
Støtter jokertegnNei
Parametersett ClipboardVerdi
PosisjonNavngitt
PåkrevdJa
Verdi fra pipelineNei
Verdi fra pipeline etter egenskapsnavnNei

-TrustedAuthServId

Authserv-id-en eller authserv-id-ene som inngangsgatewayen din skriver i Authentication-Results, for eksempel mx.example.org. Cmdleten sammenligner eksakt, uten hensyn til store og små bokstaver og uten underdomener. Kontrollinjer med en av disse ID-ene får AuthTrust = Trusted, og bare de inngår deretter i Spf, Dkim, Dmarc og Arc. Det samme gjelder receiver= i en Received-SPF-linje.

Resultatet er bare så pålitelig som gatewayen: Den må fjerne innkommende Authentication-Results-linjer som påberoper seg dens egen authserv-id (RFC 8601, avsnitt 5). Om den gjør det, kan ikke sees i et hode. Hvis to linjer med klarert ID motsier hverandre, rapporterer cmdleten AuthTrustedConflict. Microsoft 365 skriver ingen authserv-id i sin kontrollinje; dersom Exchange Online mottar e-posten, lar du parameteren være borte.

For en hel økt kan verdien lagres som standard, for eksempel i PowerShell-profilen:

$PSDefaultParameterValues['Get-MailHeaderAnalysis:TrustedAuthServId'] = 'mx.example.org'
ParameteregenskapVerdi
TypeString[]
StandardverdiIngen
Støtter jokertegnNei
Parametersett (alle)Verdi
PosisjonNavngitt
PåkrevdNei
Verdi fra pipelineNei
Verdi fra pipeline etter egenskapsnavnNei

Inndata

System.String: Hodelinjer eller hele hodet, til -Header.

System.IO.FileInfo: Filobjekter fra Get-ChildItem, der FullName bindes til -Path.

Utdata

MailHeaderAnalyzer.Analysis: ett objekt per analysert hode. Egenskapene beskrives i avsnittet Utdataobjekt.

Merknader

Analyseteksten (forklaringer i Findings, CompAuthReasonMeaning og betydningsfeltene) er på engelsk, slik at den kan brukes uendret i internasjonale saker. Utdata i standardvisningen kan vises fullstendig med Format-List *.

ConvertTo-MailHeaderReport

Oppretter en rapport som Markdown eller tekst fra et analyseobjekt.

Syntaks

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

Beskrivelse

Rapporten omfatter emne, avsender, dato og Message-ID, autentiseringsresultatene med opprinnelsesangivelse og alignment, alle funn, leveringskjeden, Exchange-klassifiseringen og verdiene fra spamfiltrene. Unicode-kontrolltegn for skriveretning forblir synlige i rapporten som <U+...>, slik at de ikke overføres til et saksbehandlingssystem via rapporten. Den siste linjen angir modulversjonen.

Eksempler

Eksempel 1

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

Oppretter en Markdown-rapport og legger den på utklippstavlen.

# Email header analysis

- Subject: Service-Report für März
- From: Beispiel Newsletter <news@example.org>
- Date: 2026-08-03T09:14:27Z
- Message-ID: <20260803091427.4Wq2Wx5RbTz@mail.example.org>

## 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 |

Eksempel 2

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

Skriver ut rapporten som tekst uten Markdown-formatering, for eksempel for e-post eller konsolllogger.

Eksempel 3

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

Bruk i Exchange Management Shell. Dersom $env:PSModulePath der er begrenset av gruppepolicyer, laster du modulen med Import-Module og den fullstendige stien til .psd1-filen.

Parametere

-Analysis

Analyseobjektet fra Get-MailHeaderAnalysis. Cmdleten avviser andre objekttyper med en bindingsfeil.

ParameteregenskapVerdi
TypeMailHeaderAnalyzer.Analysis
StandardverdiIngen
Støtter jokertegnNei
Parametersett (alle)Verdi
Posisjon0
PåkrevdJa
Verdi fra pipelineJa
Verdi fra pipeline etter egenskapsnavnNei

-Format

Utdataformatet. Gyldige verdier:

  • Markdown: Overskrifter, punktlister og leveringskjeden som tabell. Standard.
  • Text: Overskrifter med store bokstaver, innrykkede linjer, leveringskjeden som nummerert liste.
ParameteregenskapVerdi
TypeString
Tillatte verdierMarkdown, Text
StandardverdiMarkdown
Støtter jokertegnNei
Parametersett (alle)Verdi
PosisjonNavngitt
PåkrevdNei
Verdi fra pipelineNei
Verdi fra pipeline etter egenskapsnavnNei

Inndata

MailHeaderAnalyzer.Analysis: resultatet fra Get-MailHeaderAnalysis.

Utdata

System.String: rapporten, én streng per analyseobjekt.

Utdataobjekt

Get-MailHeaderAnalysis returnerer ett objekt av typen MailHeaderAnalyzer.Analysis per inndata. Standardvisningen viser sammendraget fra eksempel 1; alle egenskaper er tilgjengelige via Select-Object, Format-List * eller ConvertTo-Json.

MailHeaderAnalyzer.Analysis

EgenskapTypeInnhold
SourceStringFilsti, Clipboard eller Text
SubjectStringEmne, RFC 2047-dekodet
From, ReplyTo, ReturnPathAdresseobjektName, Address, Domain, Display; $null dersom feltet mangler
DateDateTime (UTC)Verdien av feltet Date
MessageIdStringMessage-ID
MailFromDomainStringKonvoluttavsenderdomene fra smtp.mailfrom i SPF-kontrollen, ellers fra Return-Path
Spf, Dkim, Dmarc, Arc, CompAuthStringResultat ifølge den relevante Authentication-Results-linjen (pass, fail, none, softfail og flere); $null dersom ikke kontrollert. Arc er mottakerens vurdering av ARC-kjeden
CompAuthReason, CompAuthReasonMeaningStringReason-kode for den sammensatte autentiseringen i Microsoft 365 og dens betydning
AuthTrustStringTrusted, Matched, Unmatched, Absent eller None, se AuthTrust
AuthServIdStringauthserv-id for den relevante kontrollinjen
AuthenticationResultsObjekt[]Alle Authentication-Results-linjer med AuthServId, Methods, Trust, Raw
ReceivedSpfObjektReceived-SPF-linjen med Result og Properties
SpfAlignment, DkimAlignmentStringStrict, Relaxed, None eller $null
HopsHop[]Leveringskjede i kronologisk rekkefølge, se Hop-objekt
HopCount, TotalDuration, SlowestHopIndex, HasClockSkewInt, TimeSpan, Int, BoolNøkkeltall for kjeden
DeliveredByStringby-verten i den nyeste Received-linjen, altså den leverende stasjonen
DkimSignaturesObjekt[]Per signatur Domain, Selector, Algorithm, Canonicalization, SignedHeaders, BodyLength, Timestamp, Expires, ReceiverResult, Tags
ArcChainObjekt[]ARC-instanser med Instance, SealDomain, ChainValidation, Methods
ArcStructure, ArcStructureIssuesString, String[]Struktur for ARC-kjeden: Consistent, Inconsistent eller $null uten ARC-hoder, samt avvikene som ble funnet. Kun strukturkontroll, ingen signaturkontroll, se ARC-kjede
ExchangeObjektHybridklassifisering fra Exchange Online, se Exchange-objekt; $null uten tilsvarende hoder
SpamObjektVurderinger fra spamfiltrene, se spamobjekt; $null uten tilsvarende hoder
ListObjektListId, Unsubscribe, OneClick (RFC 8058); $null uten listehoder
FindingsFinding[]Avvik med Severity, Code, Message, se Funn
FieldsObjekt[]Alle felt med Name, Value (utfoldet) og Raw
HadBodyBoolOm meldingstekst fulgte etter hodet

MailHeaderAnalyzer.Hop

Hver oppføring i Hops tilsvarer en Received-linje. Rekkefølgen er kronologisk, altså omvendt av rekkefølgen i hodet.

EgenskapInnhold
IndexLøpenummer, 1 = innlevering
FromHost, Helo, ReverseDns, IPAddress, IsPrivateIPOpplysninger om det innleverende systemet fra from-delen; IP-adressen kommer fra hakeparentesen i kommentaren, rDNS-navnet fra kommentaren før den
ByHost, SoftwareMottakende system og programvaren det bruker (kommentar etter by)
Protocol, ProtocolClasswith-verdi og klasse etter RFC 3848: TlsAuthenticated (ESMTPSA), Tls (ESMTPS eller TLS-informasjon finnes), Authenticated (ESMTPA), Plain, Http, Mapi, Local
TlsVersion, TlsCipherFra skrivemåtene til Microsoft (version=TLS1_2, cipher=…), Postfix (using TLSv1.3 with cipher …) og Exim
Id, For, ViaAndre Received-bestanddeler
DateTidsstempel etter semikolonet, UTC
DelayTimeSpan til forrige hopp; negativ ved klokkeavvik
ProviderGjenkjent leverandør eller gateway basert på vertsnavnene (Microsoft 365, Google Workspace, SEPPmail, HIN, Proofpoint, Mimecast og flere)
Attested$true kun for siste hopp: Bare denne linjen er skrevet av mottakersystemet selv, alle nedenfor fantes allerede i meldingen
RawOriginallinjen

AuthTrust: Opprinnelse til kontrollresultatene

En Authentication-Results-linje kan enhver avsender selv skrive inn i en melding, det samme kan gjøres med en passende Received-linje. Fra hodet alene kan det derfor ikke dokumenteres hvem som skrev en kontrollinje. I henhold til RFC 8601, avsnitt 5, er bare linjen relevant dersom authserv-id-en er kjent som mottaksorganisasjonens egen, og inngangsgatewayen må fjerne innkommende linjer med denne ID-en. Cmdleten modellerer denne regelen med -TrustedAuthServId. Uten denne parameteren sammenligner den authserv-id-en bare med by-vertene i Received-kjeden (samme domene eller underdomene, alltid ved punktgrensen, ingen delstreng); dette er en plausibilitetskontroll.

VerdiBetydning
TrustedAuthserv-id-en finnes i -TrustedAuthServId. Så snart en slik linje finnes, inngår bare linjer på dette nivået i Spf, Dkim, Dmarc og Arc. Pålitelig forutsatt at gatewayen fjerner fremmede linjer med denne ID-en
MatchedAuthserv-id-en forekommer som by-vert i kjeden. Plausibelt, men ikke dokumentert: En forfalskning kan inneholde den passende Received-linjen. Uten -TrustedAuthServId peker funnet AuthPlausibleOnly på dette. Linjer på dette nivået teller dersom ingen Trusted-linje finnes
UnmatchedAuthserv-id-en er verken klarert eller finnes i kjeden. Resultatene vises, men anses som udokumenterte påstander; funnet AuthUnverified peker på dette
AbsentLinjen mangler authserv-id. Microsoft 365 skriver sin kontrollinje på denne formen; den begynner direkte med spf=
NoneIngen kontrollinje finnes

Dersom hodet inneholder kontrollinjer med flere opprinnelser, rapporterer funnet AuthMixedOrigins forholdet. Mangler en kontrollinje, men en Received-SPF-linje finnes, overtas resultatet som Spf og merkes med ReceivedSpfOnly.

Med -TrustedAuthServId kommer to funn i tillegg: AuthNotTrusted, dersom ingen kontrollinje har en klarert ID, og AuthTrustedConflict, dersom to slike linjer rapporterer ulike resultater for spf, dmarc, arc eller compauth. Det andre tilfellet betyr at minst én linje ikke stammer fra gatewayen og at gatewayen ikke har fjernet den. Cmdleten overtar i dette tilfellet den øverste linjen; hvilken av de to som er ekte, kan ikke avgjøres ut fra hodet. DKIM er unntatt fra denne sammenligningen, siden flere signaturer legitimt kan ha ulike resultater.

ARC-kjede: struktur og vurdering

For ARC leverer cmdleten to separate opplysninger. Arc er resultatet arc= fra den relevante kontrollinjen, altså vurderingen fra mottakeren som har kontrollert kjedens signaturer. ArcStructure er modulens egen kontroll og gjelder bare strukturen i henhold til RFC 8617: fortløpende instansnumre i=1 til i=n (høyst 50), nøyaktig én ARC-Seal, én ARC-Message-Signature og én ARC-Authentication-Results per instans, samt cv=none ved instans 1 og cv=pass ved alle de øvrige. Modulen beregner ikke signaturene på nytt; Consistent sier derfor ingenting om hvorvidt kjeden er ekte. Avvikene står i ArcStructureIssues og i funnet ArcStructureInconsistent.

Opplysningene i ARC-Authentication-Results er påstander fra den aktuelle videresendingen. Funnet DkimBrokenAfterForward klassifiserer derfor bare en DKIM-feil som følge av videresending når mottakeren selv rapporterer arc=pass og en tidligere instans har registrert en DKIM-pass for samme domene.

DMARC-alignment

SpfAlignment sammenligner konvoluttavsenderdomenet med From-domenet, og DkimAlignment sammenligner d=-domenet til den kontrollerte signaturen med From-domenet. Strict betyr identisk domene, Relaxed samme organisasjonsdomene, None ingen samsvar. Organisasjonsdomenet bestemmes heuristisk: De to siste etikettene, eller de tre siste ved kjente sammensatte endelser som co.uk eller com.au. En fullstendig Public Suffix List er ikke inkludert.

MailHeaderAnalyzer.ExchangeClassification

Dersom hodet inneholder feltene X-MS-Exchange-Organization-*, X-OriginatorOrg eller X-MS-Exchange-CrossTenant-*, fyller cmdleten ut egenskapen Exchange. Betydningene følger Exchange-teamets artikkel «Demystifying hybrid mail flow»; bakgrunnen beskrives i artikkelen Exchange-hybridhoder: internt eller eksternt?.

EgenskapInnhold
Directionality, DirectionalityMeaningOriginating eller Incoming med forklaring
AuthAs, AuthAsMeaningInternal eller Anonymous med konsekvensene for EOP-filtrering
AuthSourceServeren som foretok klassifiseringen
AuthMechanism, AuthMechanismMeaningMekanismekode. Bare verdien 10 (Externally Secured) er offentlig dokumentert; for alle andre koder opplyser modulen uttrykkelig at Microsoft ikke dokumenterer dem
OriginatorOrgStandarddomene for den sendende tenanten, det ikke-forfalskbare tenantkjennetegnet ved mottak fra Microsoft 365
CrossTenantAuthAs, CrossTenantAuthSource, CrossTenantIdKlassifisering og tenant-ID ved tenantgrensen
CrossTenantFromEntity, CrossTenantFromMeaningInternet, Hosted eller HybridOnPrem med forklaring
WrongTenantAttributionVerdien av X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp dersom meldingen ble tilordnet en fremmed tenant
OrganizationHeadersPreserved, CrossPremisesHeadersFilteredMarkører for mottatte organisasjonshoder, eller hoder fjernet av sendekoblingen

MailHeaderAnalyzer.SpamAssessment

Egenskapen Spam sammenfatter vurderingene fra de kjente filtrene. Verdiene kommer fra eksterne systemer og dekodes, men vurderes ikke.

EgenskapKildeInnhold
Scl, SclMeaningX-Forefront-Antispam-Report, X-Microsoft-AntispamSpam Confidence Level med betydning (-1 klarert, 0/1 ikke spam, 5/6 mistanke om spam, 9 svært sannsynlig spam)
BclX-Microsoft-AntispamBulk Complaint Level 0 til 9
Category, CategoryMeaningCAT:Klassifisering som SPM, PHSH, HPHSH, MALW, SPOOF, DIMP, UIMP, BULK
SpamFilterVerdict, SpamFilterMeaningSFV:Filterresultat som NSPM, SPM, SKA (tillatelsesliste), SKI (intraorganisatorisk)
IPVerdict, IPVerdictMeaningIPV:CAL (IP på tillatelsesliste for forbindelser) eller NLI (intet omdømme)
Direction, DirectionMeaningDIR:INB, OUT, INT
ConnectingIP, CountryCIP:, CTRY:Innleverende IP og opprinnelsesland
ForefrontX-Forefront-Antispam-ReportAlle nøkkel-verdi-par i feltet
SpamAssassinScore, SpamAssassinTestsX-Spam-StatusPoengsum og utløste tester
RspamdSymbolsX-Spamd-Result, X-Spam-ReportSymboler med poengsum

Den fullstendige listen over compauth-Reason-koder finnes i artikkelen Microsoft 365 compauth: Reason-koder.

Funn

Cmdleten leverer avvik som objekter i Findings, hver med Severity (Info, Warning, Fail), en stabil Code for filtre og skript samt en forklaring i Message.

KodeAlvorlighetsgradBetydning
DuplicateFieldWarningEt felt som RFC 5322 begrenser til én instans (From, Subject, Date, Message-ID og flere), forekommer flere ganger. E-postklienter og filtre kan velge ulike instanser; et kjent mønster ved forfalskninger
BidiControlsWarningUnicode-kontrolltegn for skriveretning i et felt. De snur leseretningen, fdp.exe vises da som exe.pdf. Modulen viser dem som <U+202E>
HopOverflowWarningFlere enn 200 Received-linjer; de overskytende ble ikke analysert
AuthPlausibleOnlyInfoAuthserv-id-en forekommer i leveringskjeden, men -TrustedAuthServId ble ikke angitt: plausibelt, ikke dokumentert
AuthNotTrustedWarning-TrustedAuthServId ble angitt, men ingen kontrollinje har en av disse ID-ene
AuthTrustedConflictWarningTo kontrollinjer med klarert ID rapporterer ulike resultater for samme metode; gatewayen fjerner tydeligvis ikke fremmede linjer
AuthUnverifiedWarningKontrollresultatene har en authserv-id som verken er klarert eller forekommer i leveringskjeden
AuthMixedOriginsWarningKontrollinjer med flere opprinnelser finnes
ReceivedSpfForeignWarningreceiver= i Received-SPF-linjen forekommer ikke i kjeden
ReceivedSpfOnlyInfoSPF-resultatet kommer bare fra Received-SPF, ikke fra en kontrollinje
NoAuthResultsInfoIngen kontrollresultater i hodet
DmarcFailFailDMARC ble ikke bestått ifølge mottaksserveren
SpfNotPassWarningSPF-resultat fail, softfail, permerror eller temperror
DkimNotPassWarningDKIM-resultat fail, permerror eller temperror, uten at mottakeren bekrefter ARC-kjeden
DkimBrokenAfterForwardInfoDKIM ble ikke bestått hos mottakeren, men mottakeren rapporterer arc=pass, og en tidligere ARC-instans har registrert en DKIM-pass for samme domene: typisk for videresendinger og e-postlister
DkimWeakHashWarningSignatur med rsa-sha1 (RFC 8301 klassifiserer SHA-1 som foreldet)
DkimBodyLengthWarningl=-taggen begrenser den signerte lengden på meldingsteksten; vedlagt innhold dekkes ikke
DkimExpiredWarningx=-tidspunktet ligger i fortiden
DkimFromUnsignedWarningFeltet From er ikke inkludert i h=, selv om RFC 6376 krever det
ArcStructureInconsistentWarningARC-hodene danner ikke en formelt komplett kjede (hull, manglende eller doble hoder, feil cv=-følge); kun strukturkontroll
ClockSkewInfoEt hopp har et tidligere tidsstempel enn forgjengeren; forsinkelsene er bare tilnærmede verdier
ReplyToMismatchInfoReply-To-domenet avviker fra From-domenet; vanlig for nyhetsbrev, et mønster ved phishing
SpfNotAlignedInfoKonvoluttavsenderdomenet og From-domenet tilhører forskjellige organisasjoner; SPF bidrar da ikke til DMARC
ExchangeWrongTenantWarningMeldingen ble tilordnet en fremmed tenant; en vanlig årsak er en innkommende kobling fra en annen tenant med samme sertifikat eller de samme IP-adressene
ExchangeHeadersFilteredWarningSendekoblingen fjernet Cross-Premises-hodene (KB3212872)
ExchangeExternallySecuredWarningAuthMechanism 10: Mottak via en mottakskobling med «Externally Secured», EOP-filtrering hoppet over
SpamCategoryWarningMicrosoft har tildelt en annen kategori enn NONE
SpamConfidenceWarningSCL 5 eller høyere

Virkemåte og begrensninger

Modulen leser det som står i hodet og utleder av det hva som kan dokumenteres uten eksterne oppslag. Dette medfører enkelte begrensninger:

  • Ingen kryptografisk kontroll. DKIM- og ARC-signaturer beregnes ikke på nytt, og DNS-oppføringer slås ikke opp. Spf, Dkim, Dmarc og Arc er alltid mottaksserverens vurdering; ArcStructure kontrollerer bare kjedens struktur.
  • Opprinnelse kan bare dokumenteres med kjennskap til gatewayen. Uten -TrustedAuthServId er AuthTrust en plausibilitetskontroll. Med parameteren avhenger utsagnet av at gatewayen fjerner fremmede kontrollinjer med sin authserv-id; modulen kan ikke kontrollere dette.
  • Bare den siste Received-linjen er dokumentert. Alle linjene under ble levert av avsenderen og kan være utformet vilkårlig. Attested markerer forskjellen; forsinkelsene i tidligere hopp bygger på opplysningene i disse linjene.
  • Organisasjonsdomener bestemmes heuristisk. For Relaxed-alignment bruker modulen en kort liste over sammensatte endelser, ikke en fullstendig Public Suffix List.
  • AuthMechanism er bare delvis dokumentert. Microsoft har ikke publisert kodene utenom verdien 10; modulen finner ikke på betydninger.
  • Tegnsett. RFC 2047-verdier dekodes med kodingene som .NET kjenner på det aktuelle systemet. Ukjente tegnsett blir stående uendret.

Personvern

Et fullstendig hode inneholder interne vertsnavn, IP-adresser, avsendere, mottakere og emner. Hvorfor slike opplysninger ikke hører hjemme i et nettbasert verktøy, forklares i artikkelen Analyser e-posthoder uten å laste opp e-posten. For modulen gjelder samme løfte som for nettleserversjonen: ingen nettverkstilgang. Testpakken til modulen inneholder en test som feiler så snart en nettverks- eller DNS-cmdlet forekommer i kildekoden.

Kildekode og versjoner

Kildekoden er tilgjengelig under MIT-lisensen på GitHub. Analyselogikken er en portering av biblioteket som også Header Analyzer på dette nettstedet bruker; begge deler testtilfellene. Continuous Integration kontrollerer hver endring med PSScriptAnalyzer og Pester i Windows PowerShell 5.1, PowerShell 7 på Windows, Ubuntu og macOS. Publiseringer i PowerShell Gallery skjer automatisk fra versjonerte tagger; endringene per versjon finnes i changelog.

Versjon 0.2.0 fra 26. september 2026 skjerpet opprinnelsesmodellen etter en kommentar i en gjennomgang fra @saltyslugga: parameteren -TrustedAuthServId, nivået Trusted, Matched nå bare som plausibilitet. Egenskapen ArcValid er utgått og erstattet av ArcStructure og ArcStructureIssues; skript som analyserer ArcValid må tilpasses.

Feil og utvidelsesønsker mottar jeg som Issue på GitHub. Anonymiser testhoder for feilrapporter på forhånd; de medfølgende testtilfellene bruker utelukkende eksempeldomener i henhold til RFC 2606 og adresser i henhold til RFC 5737.

Kilder

  1. MailHeaderAnalyzer i PowerShell Gallery

    Pakkeside med installasjonskommando og versjonshistorikk.

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

    Kildekode, testpakke, changelog og Issues.

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

    Mal for oppbyggingen av denne referansen (syntaks, beskrivelse, eksempler, 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 for Authentication-Results og regelen om at bare mottaksorganisasjonens linje er relevant (avsnitt 5).

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

    Struktur for Received-linjene og anbefalingen om en øvre grense som beskyttelse mot løkker (avsnitt 6.3).

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

    with-verdiene ESMTPS, ESMTPA og ESMTPSA.

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

    Taggene i DKIM-Signature, krav om signering av From.

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

    Klassifisering av rsa-sha1 som foreldet.

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

    Strict- og Relaxed-alignment.

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

    Struktur for kjeden med ARC-Seal, ARC-Message-Signature og ARC-Authentication-Results, instansnumre og cv=-verdier.

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

    Betydningen av SCL, BCL, CAT, SFV, IPV og compauth-Reason-kodene.

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

    Opprinnelse til betydningene av MessageDirectionality, AuthAs og AuthMechanism.

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

    Nettleserversjonen med samme analyselogikk.

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

Kommentarer

Kommentarene lastes inn fra GitHub / Giscus.