There are a few things to check here.
First of all, if you are sending from your own domain (even if your hosted
by Verizon), understand that sending through Verizon is relaying. Relaying
will automatically get you labeled as junk mail by virtually every system out
there. The solution is to include verizon's server in SPF. This will help
scores on Yahoo, Hotmail, and others.
Secondly, ensure every header required by RFC822 is in your message. You
must include Message ID. Your message will be tagged as spam otherwise.
When sending to multiple users, use the administrator's account name or an
account name assigned to the application for the To address, and then list
the names in BCC. A well behaved mail relay will deliver each BCC copy
independently. Spammers can't afford this behavior, so they typically use To
or CC for their messages. By using BCC, you will both safeguard the user's
e-mail addresses and reduce your chance at getting flagged as spam.
Also, use only well formed HTML, and properly encapsulate it in a mime. If
you have to, use XHTML and the System.Xml classes to make your HTML. Well
formed HTML, and valid XHTML, will help prevent you from being flagged as
spam. That means no overlapping end tags, that means closing every tag you
open, that means including a plain text message (even if it is just "you need
to read this as HTML"), and it means using only local resources, encapsulated
in the message.
I don't (and can't) promise this will get you through Hotmail, however my
application that performs all these things does get through Hotmail
consistently, gets through Yahoo consistently, and passes both Spamassassin
and Popfile consistently. None of these services flag it as spam.
I cannot, however, consistently deliver to Earthlink and certain other
domains, because my e-mail server has a dynamic IP at the moment, and even
with domain records, SPF, etc. valid and active, they won't accept the mail.