Version 11 of attachment

Updated 2005-05-02 18:08:03

E-mail attachments constitute a surprisingly large and even unwieldy subject. The first clarification is to distinguish emission of e-mail with attachments, from its reception and interpretation. The Wiki page on the mime package focuses mostly on the latter.


10/31/2002: Roberto Mello provides the following example:

 package require mime
 package require smtp

 set rcpts [open email-list.txt]
 set files [lsort [glob *.JPG]]

 set text "Ooops! Some of the pictures got mixed up in the last e-mail."
 append text \n "Let's try this again." \
             \n \n "Happy Halloween!" \
             \n Your friendly MASA Villages Staff"

 set i 0
 while { [gets $rcpts rcpt] != -1 } {
        set this_image [lindex $files $i]

        # create an image and text
        set imageT [mime::initialize -canonical \
            "image/jpg; name=\"$this_image\"" -file $this_image]
        set textT [mime::initialize -canonical text/plain -string $text]

        # create a multipart containing both, and a timestamp
        set multiT [mime::initialize -canonical multipart/mixed \
            -parts [list $imageT $textT]]

        # send it to some friends
        puts "Sending to $rcpt: $this_image"
        smtp::sendmessage $multiT \
            -header [list From "Juliane Mello <jmello@usu>"] \
            -header [list To $rcpt] \
            -header [list Subject "Ooops!"]

        incr i
 }

The variety of ways to transmit e-mail attachments with Tcl is large. CL keeps a few models in [L1 ].

One of the reasons for active interest in the range of possibilities is typical for Tcl: one wants to compensate for various constraints. mime had severe flaws before tcllib 0.8 (and still has other errors--more on that, later) and is essentially unreliable with Tcl before 8.2. CL frequently needs to set up quick e-mail operations on hosts equipped with old interpreters; 7.6, for example, in the case of a client met in January 2002. For older interpreters, it's best to enlist outside help, as with

    set tmpfile /tmp/abc[pid]
    set subject "This is the subject line."

    exec /usr/local/bin/mpack -s $subject -o $tmpfile $standard_name
    set To {The distribution list}
    set recipients "[email protected] [email protected] [email protected]"
    set recipients [join $recipients ,]
    exec $sendmail -t << \
    "To: ($To)
    Bcc: $recipients
    [exec cat $tmpfile]"






Mutt: Someone had contributed a mutt example that was not correct (mutt tossed back a "bad usage" message). CL's taken the liberty of simplifying the example from four lines to one, in the process of correcting it:

    exec mutt -s $subject -a $attachment $to << $body

Other useful external Unix utilities include pine and uuencode [give examples].


CMM: Can anyone enlighten on the proper way to unencode incoming binary attachments for output to disk?


FP: Another useful Unix utility for this job is UUDeview [L2 ]

    uuenview -b -m [email protected] -s "The Subject" filename