On Tue, 2004-05-11 at 13:24, Gustavo Gouvea wrote: > I was using "mail" to send a backup report on my FedoraBox, > but now I need to send an attachment. > > Can I do that with "mail"? I searched the man page, and > havent found anything. > > Is there a way to send files as attchments in the cmd line? I cop'ed this perl script off of the net a little while back. It's been working for me. -- Joe "Kuramarujo" Klemmer | Current rank: Maegashira 15 http://www.webtrek.com/~klemmerj/sumo.html
#!/usr/bin/perl -w # # simple program to send a text message with an attachment # # William Julien ### use strict; # turn on the strict pragma use Getopt::Std; # use standard getopt to parse options $/ = undef; # turn on slurp mode # # scope local variables # my ($date, # the current date $sendmail, # the sendmail command $document, # the document text %options, # program options $filename, # a file to send $file, # the content of a file @filelist, # list files to send $tolist, # list of comma separated email addresses $today, # today's date $usage, # program usage $man, # program man page $subject, # email subject $extent, # file extension %mime_type, # list of supported application context mime types $mime_type, # current mime application content type ); # # variable initializations # $man = <<MAN; NAME mime_mail DISCRIPTION This program is a command line mailer that sends a text file description and one or more files in mime attachments. On success, mime_mail will work silently. SYNOPSIS mime_mail -h | -d document.txt -s "mail subject" -u "user1 [,user2 ...]" -f "file1 [,file2 ...]" OPTIONS -h Displays a man page. -d document.txt Sends "document.txt" in the mail message body. The file must be a normal text file. If a "-" is provided as an argument, the input will be taken from stdin. If no "-d" argument is supplied, the attachment will be sent with the message "Please see the attached.". -s "mail subject" Sets the mail subject. The mail subject must be quoted if the subject contains any spaces. -u user1,user2 ... A comma separated list of email addresses or aliases. Quotes are required if the list contains any spaces. -f file1,file2 ... A comma separaed list of files to attach. Quotes are required if the list contains any spaces. The files can be of any type. The recognised application content types are ".doc", ".html", ,"htm",".xls", ".csv", ".pdf", ".rtf", and ".mdb". William Julien 425-865-5511 MAN $usage = <<USAGE; Usage: mime_mail -h | -d document.txt -s "mail subject" -u "user1 [,user2 ...]" -f "file1 [,file2 ...]" USAGE $sendmail = "/usr/sbin/sendmail"; if ( ! -f $sendmail ) { die "Sorry -- cannot locate sendmail at $sendmail.\nYou must edit $0\n"; } $today = scalar(localtime()); %mime_type = ("doc" => "application/msword", "txt" => "text/plain", "htm" => "text/html", "html" => "text/html", "xls" => "application/vnd.ms-excel", "csv" => "application/octet-stream", "pdf" => "application/acrobat", "rtf" => "application/rtf", "mdb" => "application/vnd.ms-access", ); # # process program options # getopts('d:s:u:f:h', \%options) or die "$usage\n"; if ( defined $options{"h"} ) { print "$man\n"; exit; } if ( defined $options{"f"} ) { @filelist = split /\,/,$options{"f"}; foreach $file (@filelist) { if (! -f $file) { die "$0: cannot open $file\n"; } } } else { die "$usage\n"; } if ( defined $options{"d"} ) { $document = $options{"d"}; if ( $document eq "-" ) { $document = <STDIN>; } else { if ( -f $document ) { open F, "$document"; $document = <F>; close F; } else { die "$0 error: cannot open $document\n"; } } } else { $document = "Please see the attached.\n"; } if ( defined $options{"s"} ) { $subject = $options{"s"}; } else { die "$usage\nError: No Subject\n"; } if ( defined $options{"u"} ) { $tolist = $options{"u"}; } else { die "$usage\n$0 error: no subject specified\n"; } open MAIL, "|$sendmail -t"; print MAIL <<HEADER; To: $tolist Subject: $subject Date: $today Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="ThisRandomString" This mail was formatted with mime_mail (wmj) --ThisRandomString Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit $document HEADER foreach $filename (@filelist) { $extent = $filename =~ /\.(\w+)$/ ? "\L$1" : undef; $mime_type = "application/octet-stream"; if ( defined $extent ) { if ( defined $mime_type{"$extent"} ) { $mime_type = $mime_type{"$extent"}; } else { $mime_type = "application/octet-stream"; } } open F,"$filename"; $file = <F>; close F; $file = encode_base64($file); print MAIL <<FILE; --ThisRandomString Content-Type: $mime_type; name="$filename" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="$filename" $file FILE } print MAIL "--ThisRandomString--\n"; # # send the mail # close MAIL; # # fin ### sub encode_base64 { use integer; my $res = ""; my $eol = $_[1]; $eol = "\n" unless defined $eol; pos($_[0]) = 0; # ensure start at the beginning while ($_[0] =~ /(.{1,45})/gs) { $res .= substr(pack('u', $1), 1); chop($res); } $res =~ tr|` -_|AA-Za-z0-9+/|; # `# help emacs # fix padding at the end my $padding = (3 - length($_[0]) % 3) % 3; $res =~ s/.{$padding}$/'=' x $padding/e if $padding; # break encoded string into lines of no more than 76 characters each if (length $eol) { $res =~ s/(.{1,76})/$1$eol/g; } return $res; }