It's not TCP that isn't reliable, it's relying on a daemon being up. This is the exact reason we want to change it, JavaMail is so poorly written that we lost 60000 emails a couple of weeks ago because an SMTP relay had problems and JavaMail just dumps the mail with no error and has no resiliance whatsoever. It doesn't even try to resend.
Piping the mail to the sendmail binary instead would eliminate the need for something to be "up" and increase reliability.