--On Saturday, October 24, 2009 4:16 AM -0500 Matthew Seaman <m.sea...@infracaninophile.co.uk> wrote:

Kelly Martin wrote:
Greetings, here's a simple question for the FreeBSD gurus out there. I
have several servers running cron scripts daily for me, and they all
send me e-mail with their output. Regardless of which server it is,
each of these e-mails have the From: address looking exactly the same.
They all say they are from the "Cron Daemon". Fine, but I'd like to
know more clearly which server the cron output is from.

How can I change the From: address of these emails to "Myserver Cron
Daemon" instead? I know cron runs as the user, so it's not immediately
obvious to me how to change the From: field. Already the subject line
says something like "Cron <r...@myserver> ..." but this doesn't stand
out enough for my tired eyes.

Hmmm... that's actually quite tricky.  There's no facility within
cron(8) for changing the address it sends /from/, and as the bit you
want to change is technically a comment on the From: line, and not
the actual sender address (the bit in the <angle brackets>) all the
address rewriting-fu in sendmail won't really help.  Besides, r...@...
is listed as a member of the 'Exposed User' class: that is, addresses
that should be exempt from address rewriting, so you'ld also have to
modify that.

Do you control the mail server where you read your e-mail?  Can you use
eg. procmail(1) as a delivery agent?  You should be able to match e-mails
from Cron and rewrite headers, or deliver cron e-mails into per-machine
mailboxes.  Something like this:

   :0 h
   * From:.*Cron <r...@\/[^\.]+

The other alternative is to re-write the cron scripts to send e-mail
themselves, rather than relying on cron(8) to capture their stdout/stderr
and e-mail it for you.  Here's a handy shell programming trick that can
make that easier.  Somewhere near the top of the script, you can add
something like this:

   exec 2>&1 | /usr/sbin/sendmail -oi -t
   echo "From: Sender Name <sen...@add.ress>
   echo "To: <recipi...@some.where>
   echo "Subject: e-mail from cron job"
   echo ""

Then everything you print out in the script will be captured as the body
of the e-mail and sent to the specified recipient.  You might get some
warnings about forgery in the mail headers if the userid the script runs
as is not the same as the 'From:' address.

Why not just echo `hostname` as the first line of every script? Isn't that what he really wants to know?

Or echo "This script came from `hostname`"?

Paul Schmehl
As if it wasn't already obvious,
my opinions are my own and not
those of my employer.

freebsd-questions@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to