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

Like this:

Další témata