mailer

来自「EM算法的改进」· 代码 · 共 194 行

TXT
194
字号
#!/usr/bin/perl## $Id: mailer.txt 1339 2006-09-21 19:46:28Z tbailey $# $Log$# Revision 1.6  2005/09/01 21:50:59  nadya# add a new line for making different version of sendmail to understand# first line in the inline plain text attachment## Revision 1.5  2005/09/01 06:37:07  nadya# add extra new line before first body line. Some sendmail version need it to show it.## Revision 1.4  2005/08/31 04:16:05  nadya# update usage## Revision 1.3  2005/08/30 22:43:51  nadya# can send attachments that are not inlined# change command line arguments inb order to use filename# in the attachment. Alloow option of input from stdin.## Revision 1.2  2005/08/20 23:19:59  nadya# fixing missing reference## Revision 1.1.1.1  2005/07/28 23:55:28  nadya# Importing from meme-3.0.14, and adding configure/make### AUTHOR: Timothy L. Bailey# CREATE DATE: 11-1-2000use Sys::Hostname;use File::Basename;$PGM = $0;			# name of program$PGM =~ s#.*/##;                # remove part up to last slash@args = @ARGV;			# arguments to program$| = 1;				# flush after all prints$SIG{'INT'} = 'cleanup';	# interrupt handler# Note: so that interrupts work, always use for system calls:# 	if ($status = system($command)) {&cleanup($status)}# requirespush(@INC, split(":", $ENV{'PATH'}));	# look in entire path# defaults$sendmail = "/usr/sbin/sendmail";  $usage = <<USAGE;		# usage message  USAGE:        $PGM address subject file [-html|-pre]      or        $PGM address subject -stdin [-html|-pre] < file        address    recipient's address        subject    subject of the email        file       name of the file to mail. When -stdin is used, a file                   is expected for reading a standard input.        -html      Optional. Mail file an HTML attachment.                     An HTML file is expected as an input.        -pre       Optional. Mail file as HTML attachment with <PRE></PRE> around it.                   An HTML file is expected as an input.        Mail the file to the recipient specified by the address.  When -html or -pre         flag is used, the file is mailed as an HTML attachment, otherwise as a text.USAGE$nargs = 3;			# number of required argsif ($#ARGV+1 < $nargs) { &print_usage("$usage", 1); }# get input arguments$address = shift;$subject = shift;$file = shift;if( $file =~ m/-stdin/) {    $stdin=1;} else {  $fullname=$file;  $name = basename($fullname, "");  # get the filename}while ($#ARGV >= 0) {  $_ = shift;  if ($_ eq "-h") {				# help    &print_usage("$usage", 0);  } elsif ($_ eq "-html") {    $html = 1;  } elsif ($_ eq "-pre") {    $pre = $html = 1;  } else {    &print_usage("$usage", 1);  }}# create the message header$hostname = hostname();$boundary .= "_----------=_112501485638080";$header .= "Content-Transfer-Encoding: binary\n";$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";$header .= "MIME-Version: 1.0\n";$header .= "From: meme\@$hostname\n";$header .= "To: $address\n";$header .= "Subject: $subject\n";$header .= "This is a multi-part message in MIME format.\n\n";$header .= "--$boundary\n";$header .= "Content-Disposition: inline;";$header .= "Content-Transfer-Encoding: binary\n";$header .= "Content-Type: text/plain; format=flowed\n";$header .= "\n";$header .= "$subject\n\n\n";$header .= "--$boundary\n";if ($html) {					# HTML  if( $name !~ m/\.html/) { $name="$name.html";}  $header .= "Content-Disposition: attachment; filename=\"$name\"\n";  $header .= "Content-Transfer-Encoding: binary\n";  $header .= "Content-Type: text/html; name=\"$name\"\n\n";} else {					# plain text  $header .= "Content-Disposition: inline;";  $header .= "Content-Transfer-Encoding: binary\n";  $header .= "Content-Type: text/plain;\n\n";  $header .= "\n";}# open a pipe to the mail programopen(OUT, "|$sendmail $address") || die("Program $sendmail not found!");# print the headerprint(OUT $header) || die("Cannot write to pipe.");# copy standard output to messageif ($pre) { print OUT "<PRE>\n"; }if ($stdin) {   while (<STDIN>) { print OUT $_; };} else {   open(IN, "<$file") || die("Can not open file $file: $!\n");   while (<IN>) { print OUT; }   close(IN);}if ($pre) { print OUT "</PRE>\n"; }# end the messageif ($html) {  print OUT "\n\n--$boundary--\n";}# close the pipe to sendmailclose OUT;# cleanup files&cleanup($status); #################################################################################                       Subroutines                                            ################################################################################# ##################################################################################       print_usage##	Print the usage message and exit.#################################################################################sub print_usage {  my($usage, $status) = @_;   if (-c STDOUT) {			# standard output is a terminal    open(C, "| more");    print C $usage;    close C;  } else {				# standard output not a terminal    print STDERR $usage;  }  exit $status;} #################################################################################       cleanup##       cleanup stuff#################################################################################sub cleanup {  my($status, $msg) = @_;  if ($status && "$msg") {print STDERR "$msg: $status\n";}  exit($status);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?