Documentation can be found at http://tcllib.sourceforge.net/doc/smtp.html ---- Here's a minimal useful example: proc send_simple_message {recipient email_server subject body} { package require smtp package require mime set token [mime::initialize -canonical text/plain -string $body] mime::setheader $token Subject $subject smtp::sendmessage $token \ -recipients $recipient -servers $email_server mime::finalize $token } send_simple_message someone@somewhere.com localhost \ "This is the subject." "This is the message." OK, this is more minimal: ... set token [mime::initialize -canonical text/plain -string $body] smtp::sendmessage $token \ -header [list Subject $subject] \ -header [list To $recipient] mime::finalize $token ... ''This last one didn't work for me; I kept getting an error from sendmessage about { } not being a valid option. -- [WHD].'' WHD, CL will make a point of returning in July 2002 to address this error. What's above certainly worked with ... well, *some* version. See also http://www.magma.ca/~glennj/tcl/mutt_sendmail.tcl.txt ---- [PT] 8-July-2004: Here is a rather more complex example that can handle an authenticating SMTP server. set tok [mime::initialize -canonical text/plain -string $TEXT] smtp::sendmessage $tok \ -servers [list $SERVER] -ports [list $PORT] \ -usetls 1 \ -username $USERNAME \ -password $PASSWORD \ -header [list From "$FROM"] \ -header [list To "$TO"] \ -header [list Subject "$SUBJECT"] \ -header [list Date "[clock format [clock seconds]]"] mime::finalize $tok '''Note''': if you have trouble with sending mail, adding ''-debug 1'' as an option to the [[sendmessage]] command will log the SMTP conversation and may help diagnose problems. ---- [SV]: See also [SMTP with attachments] ---- [CMcC] 050220: I have put together a first cut asynchronous SMTP client here [http://sharedtech.dyndns.org/~colin/smtp-snit.tcl] ... I'd be interested to see if it works for people. The design is moderately interesting. It's a snit object which is mostly composed of methods of the form X-Y where X is the protocol command last issued, and Y is a glob to match the server's response code. This is a finite state machine, and the fileevent bubbles through it driven by responses from the server. Given this [FSA] design, it should be easy enough to use the tcllib finite state machine to drive it, too, if that were desired. I have reservations about too great a reliance on [FSA] as a programming technique, though. ---- [Category Package], subset [Tcllib]