see rfc2821.txt
  1. perl -MMIME::Base64 -e 'print encode_base64("username");'
  2. perl -MMIME::Base64 -e 'print encode_base64("password");'
  3. telnet mail.xxx.com 25 or
    telnet mail.xxx.com 587

      Service Ext   EHLO Keyword
       Send             SEND
       Send or Mail     SOML
       Send and Mail    SAML
       Expand           EXPN
       Help             HELP
       Turn             TURN
    
        MAIL
        RCPT
        DATA
        RSET
        VRFY
        NOOP
        QUIT
        AUTH
    
    Headers should be sent in the order :
        Return-Path, Received, Date,  From,  Subject,  Sender, To, cc, etc.
    

    message = fields *( CRLF *text ) ; Everything after first null line is message body fields = dates ; Creation time, source ; author id & one 1*destination ; address required *optional-field ; others optional source = [ trace ] ; net traversals originator ; original mail [ resent ] ; forwarded trace = return ; path to sender 1*received ; receipt tags return = "Return-path" ":" route-addr ; return address received = "Received" ":" ; one per relay ["from" domain] ; sending host ["by" domain] ; receiving host ["via" atom] ; physical path *("with" atom) ; link/mail protocol ["id" msg-id] ; receiver msg id ["for" addr-spec] ; initial form ";" date-time ; time received originator = authentic ; authenticated addr [ "Reply-To" ":" 1#address] ) authentic = "From" ":" mailbox ; Single author / ( "Sender" ":" mailbox ; Actual submittor "From" ":" 1#mailbox) ; Multiple authors ; or not sender resent = resent-authentic [ "Resent-Reply-To" ":" 1#address] ) resent-authentic = = "Resent-From" ":" mailbox / ( "Resent-Sender" ":" mailbox "Resent-From" ":" 1#mailbox ) dates = orig-date ; Original [ resent-date ] ; Forwarded orig-date = "Date" ":" date-time resent-date = "Resent-Date" ":" date-time destination = "To" ":" 1#address ; Primary / "Resent-To" ":" 1#address / "cc" ":" 1#address ; Secondary / "Resent-cc" ":" 1#address / "bcc" ":" #address ; Blind carbon / "Resent-bcc" ":" #address optional-field = / "Message-ID" ":" msg-id / "Resent-Message-ID" ":" msg-id / "In-Reply-To" ":" *(phrase / msg-id) / "References" ":" *(phrase / msg-id) / "Keywords" ":" #phrase / "Subject" ":" *text / "Comments" ":" *text / "Encrypted" ":" 1#2word / extension-field ; To be defined / user-defined-field ; May be pre-empted msg-id = "<" addr-spec ">" ; Unique message id extension-field = Any field which is defined in a document published as a formal extension to this specification; none will have names beginning with the string "X-" user-defined-field = Any field which has not been defined in this specification or published as an extension to this specification; names for such fields must be unique and may be pre-empted by published extensions

    spamhaus.org has 173.54.41.0/20 probibited fromsending email