Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Mar 1997 06:13:27 GMT
From:      Tony Kimball <Anthony.Kimball@East.Sun.COM>
To:        current@freebsd.org
Cc:        ville@vlsi.fi
Subject:   Suggested fetchmail port addition (was: Re: Fetchmail nolonger working)
Message-ID:  <199703260613.GAA01499@compound.east.sun.com>

next in thread | raw e-mail | index | archive | help
Quoth Ville Eerola on Wed, 26 March:
: Normally fetchmail uses SMTP
: connection to the localhost to deliver the messages it downloads from
: the mail sever. Thus, you need to have a MTA listening to port 25 on
: the host runnig fetchmail, or alternatively you need to configure
: fetchmail to use a local MDA directly.

Speaking of which, here is a local MDA I use in order that I do not
have to run a local sendmail.  Unless I am overlooking equivalent
functionality already hidden somewhere in the base OS, it might be
useful to include this in the fetchmail port.

/home/alk/.fetchmailrc:
server subtle proto imap user alk pass ******** mda /usr/local/bin/catmail
server saphire proto imap port 3131 user alk pass ******** mda /usr/local/bin/catmail
server perham proto pop3 user alk pass ******** mda /usr/local/bin/catmail

/usr/local/bin/catmail:
#!/usr/bin/perl
#
# name: 
#  catmail
# description:
#  a mail delivery agent in perl
# usage: 
#  catmail [-{q,v}]* < mailstream
# environment: 
#  MAIL path to spool file
# synopsis:
#  delivers a single mail message on stdin to the user spool file
#  specified by the environment.
# author:
#  alk@pobox.com
# date:
#  12 Mar 97
#

$verbose=0;
$quiet=1;
while ($ARGV[0]) {
    if ($ARGV[0] =~ '^-.*[vV]') { $verbose=1; }
    if ($ARGV[0] =~ '^-.*[qQ]') { $quiet=0; }
    shift;
}

$mail=$ENV{'MAIL'};
if (! $mail) {
    $mail=$ENV{'SPOOL'};
}
if (! $mail) {
    $_=$ENV{'USER'};
    if (!$_) {
	$_=$ENV{'HOME'};
	if ($_) {
	    s,.*/,,g;
	}
    }
    if (-d '/var/mail') {
	$mail="/var/mail/$_";
    } elsif (-d '/usr/spool/mail') {
	$mail="/usr/spool/mail/$_";
    }
}

$_=$mail;
$user=s,.*/,,g;

die "Unable to set spool file path" unless $mail;
die "Unable to open spool file $mail" unless open(MAIL,">>$mail");

$line=0;
$replyto='';
$returnpath='';
$from='';

while (<STDIN>) {
    if (/^Reply-To: ([-_.A-Za-z0-9]*@[-_.A-Za-z0-9]*).*/) {
	$replyto=$1;
	$header[$line++]=$_;
    } elsif (/^Return-Path: .*<([-_.A-Za-z0-9]*@[-_.A-Za-z0-9]*)>.*/) {
	$returnpath=$1;
	$header[$line++]=$_;
    } elsif (/^From: .*<([-_.A-Za-z0-9]*@[-_.A-Za-z0-9]*)>.*/) {
	$from=$1;
	$header[$line++]=$_;
    } elsif (/^[A-Z][-A-Za-z]*: .*/) {
	$header[$line++]=$_;
    } elsif (/^\t/) {
	$header[$line++]=$_;
    } elsif (/^ /) {
	$header[$line++]=$_;
    } else {
	$keep=$_;
	last;
    }
}

if ($from) {
    $xfrom=$from;
} elsif ($replyto) {
    $xfrom=$replyto;
} elsif ($returnpath) {
    $xfrom=$returnpath;
} else {
    $xfrom=$user
}

@WEEK=('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
@MONTH=('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
	'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($year > 38 && $year <= 99 ) {
    $cent = 19;
} else {
    $cent = 20;
}
printf MAIL "From %s %s %s %d %d:%02d:%02d %02d%02d\n",
    $xfrom,$WEEK[$wday],$MONTH[$mon],$mday,$hour,$min,$sec,$cent,$year
  || die "Unable to append to $mail";
if ($verbose) { print ":"; }


for ($i=0; $line--; ) {
    print MAIL $header[$i++] || die "Unable to append header line $i to $mail";
    if ($verbose) { print ","; }
}

print MAIL "$keep";

while (<STDIN>) {
    $i++;
    print MAIL $_ || die "Unable to append mail line $i to $mail";
    if ($verbose) { print "."; }
}

if ($verbose) { print "\n"; }
if (! $quiet) { print "$i lines output\n"; }

close(MAIL);




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703260613.GAA01499>