Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Oct 2009 10:16:36 +0100
From:      Matthew Seaman <m.seaman@infracaninophile.co.uk>
To:        Kelly Martin <kellymartin@gmail.com>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: changing cron's From: address in emails
Message-ID:  <4AE2C5F4.20109@infracaninophile.co.uk>
In-Reply-To: <1338880b0910240008h5d5e7846q8ccf184728d9e036@mail.gmail.com>
References:  <1338880b0910240008h5d5e7846q8ccf184728d9e036@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
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.

	Cheers,

	Matthew

-- 
Dr Matthew J Seaman MA, D.Phil.                   7 Priory Courtyard
                                                  Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey     Ramsgate
                                                  Kent, CT11 9PW


[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.13 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEAREIAAYFAkrixfoACgkQ8Mjk52CukIzcbgCfftS2TJdmxZmk13UmF6c4Qydl
Gh8An2JbP9562n+KzVPAnk4td+JmYCsA
=l97P
-----END PGP SIGNATURE-----

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