[PLUG] mailx question
Paul Heinlein
heinlein at madboa.com
Mon Jun 3 19:04:47 UTC 2013
On Mon, 3 Jun 2013, Rich Shepard wrote:
> On Mon, 20 May 2013, Paul Heinlein wrote:
>
>> The tool I'd normally reach for in this situation is m4. If, for instance,
>> you were able to loop through a list of subscribers and assign
>> $NAME and $ADDRESS, then
>>
>> m4 -D GREETING="$NAME" newsletter.m4 | mail -s "Subject" $ADDRESS
>>
>> The newletter.m4 would contain the GREETING token which would get replaced
>> with $NAME.
>
> Paul,
>
> I've read the m4 man page, info file, and manual (the .pdf version
> of the info file) without seeing how I would set up the input files.
> I assume that one file contains two tokens, NAME and ADDRESS, but
> how are they separated on each line?
That was an exercise left to the reader :-) because I don't know how
you currently store and retrieve your recipients' e-mail addresses.
If all the file contained was the greeting name and e-mail address,
you could separate them anyway you'd like. A CSV format would be easy,
but it might break if the greeting name included a comma. A more
robust file might use a colon, which is unlikely to occur in your
data. Here's a trivial example:
----- %< -----
billg at microsoft.com:Bill
plug at lists.pdx.org:PLUG Members
president at whitehouse.gov:Mr. President
queen at royal.gov.uk:Madam
----- %< -----
For the template, you're correct, e.g.,
----- %< -----
GREETING,
This is the text of the newsletter.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
----- %< -----
A script that used those files -- here assumed to be named
subscribers.txt and news.m4 -- might work something like this:
while read LINE; do
ADDR=$(echo $LINE | cut -d: -f1)
GRTG=$(echo $LINE | cut -d: -f2)
m4 -D GREETING="$GRTG" news.m4 | mail -s 'June News' $ADDR
done < subscribers.txt
There are, of course, several different ways to accomplish the same
task, but that might get you started.
An m4 template, by the way, is easy to construct and test, because by
default m4 sends output to /dev/stdout.
--
Paul Heinlein
heinlein at madboa.com
45°38' N, 122°6' W
More information about the PLUG
mailing list