Version 1 of Sendmail

Updated 2002-03-06 20:31:09
     ## Authors: Jonathan Perret and Gerald Lester                   ##
     ## Purpose: This sends SMTP mail                                ##
     ##    Date: December 27, 1995                                   ##
     ## (mod for ESMTP server by Igor Volobouev, 03/06/02)           ##
     ##################################################################

     ## Send SMTP to mail host.
     proc sendmail {smtphost toList from subject body {trace 0}} {
        if $trace then {
                puts stdout "Connecting to $smtphost:25"
        }
        set sockid [socket $smtphost 25]
        puts $sockid "MAIL From:<$from>"
        flush $sockid
        # Get whatever junk the server is throwing at us until there
        # is an acceptable status word. The junk may be there because
        # we did not use the HELO command, and the server is ESMTP
        # instead of just SMTP.
        set result ""
        while {1} {
            set tmp [gets $sockid]
            append result $tmp "\n"
            set extended_code [string range $tmp 0 3]
            if {[string compare [string range $extended_code end end] "-"]} {
                break
            }
        }
        if $trace then {
                puts stdout "MAIL From:<$from>\n\t$result"
        }
        foreach to $toList {
            puts $sockid "RCPT To:<$to>"
            flush $sockid
        }
        set result [gets $sockid]
        if $trace then {
                puts stdout "RCPT To:<$to>\n\t$result"
        }
        puts  $sockid "DATA "
        flush $sockid
        set result [gets  $sockid]
        if $trace then {
                puts stdout "DATA \n\t$result"
        }
        puts  $sockid "From: <$from>"
        puts  $sockid "To: <$to>"
        puts  $sockid "Subject: $subject"
        puts  $sockid "\n"
        foreach line [split $body  "\n"] {
                puts  $sockid "[join $line]"
        }
        puts  $sockid "."
        puts  $sockid "QUIT"
        flush $sockid
        set result [gets  $sockid]
        if $trace then {
                puts stdout "QUIT\n\t$result"
        }
        close $sockid 
        return;
     }