I would not recommend the asp.net webpage to submit, even if you run it in a separate background thread. I think you risk that the server will process your process in the middle of sending, which will ruin it. You really need to write some kind of separate service or application to send your letters.
The easiest option is to simply create a quick and dirty application for the console or windows.
Registration is also important, as is another poster. If this fails, you want to know exactly what was sent and where it was stopped, so that when you restart, you do not mail all the people for whom it worked again. You want to be able to enter a starting point for sending, so if you need to reset your email number 5000, you can.
Classes in the System.Net.Mail namespace will work just fine for sending your mail.
One of the biggest problems will be finding an email site that will allow you to send so many emails. Most email hosts are throttled and sometimes change depending on server conditions, so if the server is heavily used, email restrictions will be more restrictive and you can only set 500 emails per hour.
We have a newsletter that reports about 20,000 people as separate emails, and we had to play with a delay between emails until we found one that will work on our email host. We got 1.2 seconds between emails, so this could be a good starting point.
I think there are email sites that specialize in bulk mailing, although if you get one of them, that might not be a problem.
In addition, if you post your own email address, this may not be a problem. And if you post your own mail, you will have the opportunity to refuse mail in the pickup directory, and you can simply dump it all there as quickly as you want, and let the email service pick it up at your own pace.
EDIT: Here are the settings you need to add to the configuration file to configure the pickup directory
<system.net> <mailSettings> <smtp from="support@test.com" deliveryMethod="SpecifiedPickupDirectory" > <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> </smtp> </mailSettings> </system.net>