123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- #!/usr/bin/perl
- #
- # mailit
- #
- # Copyright (c) 1998, 2016 by Peter_Siegrist(SystemLoesungen) (PSS@ZweierNet.ch)
- #
- # All Rights reserved.
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
-
- #----------------------------------------------
- #-- INITIAL SETTINGS TO BE MODIFIED BY USERS
- #----------------------------------------------
-
- BEGIN {
- #-- Set Path to MIME::Lite Module if not in @INC
- #-- i.e. $MIME_LITE_PATH = "/home/myhome/lib/";
- #-- uncomment both of the next two lines therefor
-
- # $MIME_LITE_PATH = "$ENV{HOME}/lib/"; # <=== here we are
- # unshift( @INC, "$MIME_LITE_PATH" )
- }
-
- #-- Set Host / Domain Part of email Address: name@$DOMAIN_NAME
- #-- i.e. $DOMAIN_NAME = "myhost.ch";
- $DOMAIN_NAME = "yourdomail.tld"; # <=== here we are
-
- #-- END INITIAL SETTINGS
-
-
- #----------------------------------------------
- #-- Modules
- #----------------------------------------------
-
- use MIME::Lite;
- use Getopt::Std;
-
-
- #----------------------------------------------
- #-- VAR's
- #----------------------------------------------
-
-
- $body = "";
-
- my %mimes = ( '.doc' => 'application/msword',
- '.rtf' => 'application/rtf',
- '.xls' => 'application/excel',
- '.xlt' => 'application/excel',
- '.pps' => 'application/pps',
- '.ppt' => 'application/ppt',
- '.pot' => 'application/pot',
- '.fmx' => 'application/x-framemaker',
- '.ai ' => 'application/postscript',
- '.eps' => 'application/postscript',
- '.ps ' => 'application/postscript',
- '.sxw' => 'application/msword',
- '.odt' => 'application/vnd.oasis.opendocument.text',
- '.ods' => 'application/vnd.oasis.opendocument.spreadsheet',
- '.odp' => 'application/vnd.oasis.opendocument.presentation',
- '.odg' => 'application/vnd.oasis.opendocument.graphics',
- '.odc' => 'application/vnd.oasis.opendocument.chart',
- '.odb' => 'application/vnd.oasis.opendocument.database',
- '.odm' => 'application/vnd.oasis.opendocument.text-master',
- '.odf' => 'application/vnd.oasis.opendocument.formula',
- '.html' => 'text/html',
- '.htm' => 'text/html',
- '.xml' => 'text/xml',
- '.xsl' => 'text/xml',
- '.jpg' => 'image/jpeg',
- '.jpeg' => 'image/jpeg',
- '.jpe' => 'image/jpeg',
- '.png' => 'image/png',
- '.gif' => 'image/gif',
- '.bmp' => 'image/bmp',
- '.tiff' => 'image/tif',
- '.tif' => 'image/tif',
- '.xbm' => 'image/x-xbitmap',
- '.zip' => 'application/zip',
- '.Z' => 'application/x-tar',
- '.gz' => 'application/x-tar',
- '.tar' => 'application/x-tar',
- '.pcap' => 'application/pcap',
- '.hqx' => 'application/mac-binhex40',
- '.pdf' => 'application/pdf'
- );
-
-
-
- #----------------------------------------------
- #-- SUB's
- #----------------------------------------------
-
- sub usage {
- print "usage: $0 \n\t-f [<from>] \n\t-t <to>\t\t\tList possible\n\t-c [<cc>]\t\tList possible\n\t-s [<subject>] \n\t-m [<mime-type:filename>] \teg. application/pdf:doc.pdf\n\t-a [<attachment>]\tComma separated list of files to attach (no spaces)\n\t-p\t\t\tread body data from STDIN if set\n\t-h help\n\t-H Manual Page\n";
- }
-
-
- #----------------------------------------------
- #-- MAIN
- #----------------------------------------------
-
- #----------------------------------------------
- #-- get options:
- #----------------------------------------------
-
- # -f <from>
- # -t <to>
- # -c [<cc>] comma separated
- # -s <subject>
- # -a <attachment(s)> comma separated
- # -m <mime-type:filename> eg. application/pdf:attachmentpdf
- # -b <body text if -m is used>
- # -p read from pipe if set
- # -h help
- # -H manpage
-
- getopt('tscafmb');
-
- my $p = 0;
- my $from = "$ENV{USER}@$DOMAIN_NAME";
- my $subject = "No Subject";
- my $to = undef;
- my $cc = "";
- my $ifile = "";
- my $imime = "";
- my @attachment = ();
-
- $opt_h && do { &usage;
- exit;
- };
- $opt_H && do { while ( <DATA> ) { print; }
- exit;
- };
- $opt_f && do { $from = $opt_f;
- };
- $opt_s && do { $subject = $opt_s;
- };
- $opt_c && do { $cc = $opt_c;
- };
- $opt_m && do { ($imime, $ifile) = split ':', $opt_m;
- };
- $opt_b && do { $itext = $opt_b;
- };
- $opt_a && do { @attachment = split ',', $opt_a;
- };
- $opt_p && do { $p = 1;
- };
- if ( $opt_t ) { $to = $opt_t;
- } else {
- print "missing mandatory argument: -t\n";
- &usage;
- exit;
- }
-
-
-
- #----------------------------------------------
- #-- read body from stdin ( if option p is set )
- #----------------------------------------------
-
- if ( $p == 1 ) {
- while ( <STDIN> ) {
- last if /^\.$/; # Finish input with single dot line
- $body .= $_;
- }
- }
-
-
- #----------------------------------------------
- #-- create mime object
- #----------------------------------------------
-
- chomp($to);
- chomp($from);
-
- $m = MIME::Lite->new(
- From => $from,
- To => $to,
- Subject => $subject,
- Type => 'multipart/mixed');
-
- if ( $opt_m ) {
- attach $m Type => 'TEXT',
- Encoding => 'quoted-printable',
- Data => "$itext";
- attach $m
- Type => $imime,
- Encoding => 'quoted-printable',
- Disposition => 'attachment',
- Data => $body,
- Filename => "$ifile";
- } else {
- attach $m Type => 'TEXT',
- Encoding => 'quoted-printable',
- Data => $body;
- }
-
- if ( $cc ) {
- $m->add( Cc => $cc );
- }
-
-
-
- #----------------------------------------------
- #-- parse filetyp / attach files
- #----------------------------------------------
-
- while ( defined( $att = shift @attachment ) ) {
- my ($ftyp) = ($att =~ /.+(\.\w{1,4})$/i);
- $ftyp = lc $ftyp;
- if ( exists $mimes{$ftyp} ) {
- if ( $mimes{$ftyp} =~ /text\// ) {
- attach $m
- Type => $mimes{$ftyp},
- Encoding => 'quoted-printable',
- Disposition => 'attachment',
- Path => "$att";
- next;
- } else {
- attach $m
- Type => $mimes{$ftyp},
- Disposition => 'attachment',
- Path => "$att";
- next;
- }
- } else {
- attach $m
- Type => 'text/plain',
- Encoding => 'base64',
- Disposition => 'attachment',
- Path => "$att";
- next;
- }
- }
-
-
-
-
- #----------------------------------------------
- #-- send message
- #----------------------------------------------
-
- $m->send;
-
-
-
-
- __END__
-
- NAME
- mailit - send mail to users, including attachments
-
- SYNOPSIS
- mailit [ -hH ]
- -t recipient,... [ -f sender ] [ -c recipient,... ]
- [ -a attachment,... ] [ -m mime-type:filename ] [ -b body text if -m ] [ -s subject ] [ -p ]
-
- DESCRIPTION
- mailit is a front end to send mails including attachments from
- the command line. It uses sendmail to deliver the message to the
- corret place. mailit is based on MIME::Lite from ZeeGee Software
- Inc.
-
- With -p flag set it reads from standard input up to an EOF or a
- single dot line. That means it can read some data through a Unix
- Pipe till EOF or, if you prefere read in interactively, terminate
- input with a single dot in the line. In interactive mode mailit
- will prompt you for the body.
- The data you entered this way will be sent as the body of the mail
- setting text/plain as Content-Type.
-
- mailit determines the 'sender address' from both the environment
- variable HOME for the 'user' part as well as the source setting
- $DOMAIN_NAME as 'domain'.
-
-
- OPTIONS
- -t recipient,...
- email address(es) of the recipient(s). If more than one separate
- by commas. (the To: Field)
-
- -f sender
- sender of the email if you not want to determine it by mailit.
- (The From: Field)
-
- -c recipient
- one or more CC: addresses. (The CC: Field)
-
- -a attachment
- one or more comma separated file names to be attached to the
- mail. see below for further discussion.
-
- -m mime-type:filename
- the mime-type and the filename of the document. This is mainly used for
- situations where you pipe (-p) a document into mailit without any
- information about the mime-type.
- Mail recipients get the piped data as attachment of type 'mime-type'
- with name 'filename'. Use the -b parameter to give the body a text.
-
- -b body text for -m
- the body text if piping some data with -m and -p to the program .
-
- -s subject
- the subject of the mail. Quote it if you use Special Characters.
- (The Subject: Field)
-
- -p mailit reads the body from standard input up to an EOF or, in
- interactive mode up to a single dot line. Without the -p flag
- mailit does not read nor send any body.
-
- -h help.
-
- -H man page like help.
-
-
- ATTACHMENTS
- mailit knows some type of files so it can set the correct
- Content-Type as well as the correct Encoding of the attachment.
-
- Text Media Types are encoded as 'quoted-printable' whereas other
- known Media Types are encoded 'base64'.
- You can expand the list of known Media Types by adding a
- 'type => encoding' entry in the %mimes hash.
-
- All unknown Media Types will be sent as 'text/plain' with 'binary'-Encoding.
-
-
- INSTALLATION
- mailit uses the MIME::Lite Modul for creating Mail Headers.
- MIME::Lite for his part uses 'sendmail' to send the message.
- Therefore you have to install 'sendmail' as well as the
- MIME::Lite Modul from ZeeGee Software Inc. (www.zeegee.com).
- If this modul can not be found in the @INC Array, that means you
- do not have a standard installation of this module therefore you have to set
- the path of the module in the INITIAL USER SETTINGS Part of the
- source script ($MIME_LITE_PATH). (see there).
-
- In some cases mailit can not determine the correct Senders domain
- name. If so, set the Senders domain name in the INITIAL USER
- SETTINGS Part of the source script ($DOMAIN_NAME). (see there).
-
-
- ENVIRONMENT VARIABLES
- mailit takes the senders name (that is, the user part of the email
- address (user@...) ) from the Environment Variable USER. Make sure
- this variable is set correctly.
-
-
- EXAMPLES
- To send just two Attachments. According to standard the Subject
- in this case is set to 'No Subject'.
-
- mailit -t shorty@host.ch -a /doc/file1.html,/doc/file2.tar.Z
-
-
- Full use:
-
- cat body.txt | mailit -t shorty@host.ch,secnd@addr.ch
- -f froma@host2.ch -a /doc/file1.html,/doc/file2.tar.Z
- -c cc1@addr.ch,cc2@addr.ch -p -s "This my Files"
-
- -m and -b use:
- somefile2pdf somefile.xxx | mailit -t shorty@host.ch -m "application/pdf:somefile.pdf" -b "Attached file for you" -p
-
-
- NOTES
- mailit is a Perl Program. You will probably need Perl 5.005 or
- better as well as Mime-Lite 2.117 or better to run.
-
- Suggestions are welcome.
-
-
- AUTHOR
- Peter Siegrist http://PSS.ZweierNet.ch (pss@ZweierNet.ch)
|