SmtpClient.SendAsyncprobably better than manual streaming, although multithreading will work just fine with the usual caveats.
http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx
As other people have pointed out, success / failure cannot be deterministically indicated when the page returns before the submission is actually completed.
A few observations when using asynchronous operations:
1) , . . SendAsync(), , , , , . , , .
, , , , ? , , , - , . . , async , .
2) Threading ASP.Net , ThreadPool, , .. , , , . , , .
3) Threading/Async , . , (, ), . , .
. ASP.Net .
. SO: ASP.NET