Rozeslání hromadného e-mailu
Občas dochází k situacím, kdy je potřeba hromadně rozeslat email. Takováto situace nastane například v případě, kdy dojde k nějakým změnám v konfiguraci na serverech, které se přímo týkají funkčnoti a chodu poskytovaných služeb. Jenoduchým řešením je napsat si malý shellovský skript, který tuto práci vykoná za nás.
Občas dochází k situacím, kdy je potřeba hromadně rozeslat email. Takováto situace nastane například v případě, kdy dojde k nějakým změnám v konfiguraci na serverech, které se přímo týkají funkčnoti a chodu poskytovaných služeb. Jenoduchým řešením je napsat si malý shellovský skript, který tuto práci vykoná za nás.
Na serveru máme nainstalován a nakonfigurován poštovní server (MTA) postfix. Pro odesílání zpráv jsem použil sendmail, který představuje rozhraní pro odesílání emailů přes postfix. Aby měli emaily správný formát a byly poslány v správném kódování a v HTML tak je potřeba nadefinovat si hlavičku emailu a předat ji sendmailu.
Nechť v souboru template.html se nachází šablona emailu, který chceme rozeslat. V souboru email.list máme seznam emailů, na které chcem email rozeslat. Každý řádek v tomto souboru představuje jednoho zákazníka. Takže když máme na zákazníka více emailů, tak jsou emailové adresy v jednom řádku odděleny čárkou.
#!/bin/bash TEMPLATE=/tmp/template.html LIST=/tmp/email.list while read EMAIL; do /usr/bin/printf %b "To: $EMAIL\nSubject: Predmet zpravy\nMIME-Version: 1.0\nContent-type: text/html; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n`cat "$TEMPLATE"`" | \ /usr/sbin/sendmail -F "Webhosting Klenot.cz" -f nase@adresa.cz $EMAIL && \ echo "`date +%H:%M:%S\ %d-%m-%Y`: email zarazen do fromty pro: $EMAIL" >> /tmp/emails.queued sleep 2; done < "$LIST" exit 0