Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Oct 2009 10:42:27 -0500
From:      Paul Schmehl <pschmehl_lists@tx.rr.com>
To:        Matthew Seaman <m.seaman@infracaninophile.co.uk>, Kelly Martin <kellymartin@gmail.com>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: changing cron's From: address in emails
Message-ID:  <D79559A491F151EA3B0703A4@[10.0.0.20]>
In-Reply-To: <4AE2C5F4.20109@infracaninophile.co.uk>
References:  <1338880b0910240008h5d5e7846q8ccf184728d9e036@mail.gmail.com> <4AE2C5F4.20109@infracaninophile.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
--On Saturday, October 24, 2009 4:16 AM -0500 Matthew Seaman 
<m.seaman@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 <root@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, root@...
> 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 <root@\/[^\.]+
>      $MATCH
>
> 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 <sender@add.ress>
>    echo "To: <recipient@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.




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