proc drain channel { # Get a response, and discard it. gets $channel } proc puts_now {channel text} { puts $channel $text flush $channel } # RFC 821 governs SMTP. proc send_SMTP_mail {SMTP_host recipients from subject text} { set standard_SMTP_socket 25 set socket [socket $SMTP_host $standard_SMTP_socket] puts_now $socket "MAIL From:<$from>" drain $socket foreach recipient $recipients { puts_now $socket "RCPT To:<$recipients>" } drain $socket puts_now $socket DATA drain $socket puts $socket "From: <$from>" puts $socket "To: <$recipients>" puts $socket "Subject: $subject\n" # Uniformize newlines. foreach line [split $text \n] { puts $socket [join $line] } puts $socket .\nQUIT drain $socket close $socket }