For quite some time I have been forwarding all email from my outlook.com address to my primary email address, which I self-host. This is done via the standard forwarding option in the outlook.com settings.
However, I have found the outlook.com spam filter to be frankly woeful - both false negatives (fine for forwarding), but worryingly many false positives. These false positives end up disappearing after 10 days and are never forwarded!
In Microsoft's defence, I'm not doing them any favours by never using the outlook account directly, so the spam filter has limited data to work with. But still one would hope that big data would come to the rescue - an spam filtering service used by millions should not be this bad by default.
The solution: a fantastic daemon called Fetchmail. It automatically connects to outlook.com via IMAP and delivers junk emails to my primary address. Even better, it leaves them in place, does not affect read status, and applies my mailserver spam filter to them. Literally a perfect solution.
Config as follows:
set daemon 120 poll outlook.office365.com protocol IMAP user "firstname.lastname@example.org" is fetchmail here password 'asdf' folder 'Junk' smtpaddress mail.example.com keep ssl
This will deliver to email@example.com, up to you to set up Sieve or whatever to forward this appropriately. I found I also needed to tighten the spam threshold than my usual.
If you use 2FA, you need to create an app password rather than using your account password. The option is buried somewhere in the Microsoft account pages.