#7 Parametrizovatelné zprávy
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed Jan 05 14:20:16 2011 +0100 (2011-01-05)
changeset 96f7d2cc5380e
parent 8 218a80f12411
child 10 11879ab34364
#7 Parametrizovatelné zprávy
java/Postak/src/cz/frantovo/postak/hack/Individuální.java
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/java/Postak/src/cz/frantovo/postak/hack/Individuální.java	Wed Jan 05 14:20:16 2011 +0100
     1.3 @@ -0,0 +1,92 @@
     1.4 +package cz.frantovo.postak.hack;
     1.5 +
     1.6 +import cz.frantovo.postak.HromadnaZprava;
     1.7 +import cz.frantovo.postak.InternetAddressKomu;
     1.8 +import cz.frantovo.postak.Nastaveni;
     1.9 +import cz.frantovo.postak.Postak;
    1.10 +import java.io.BufferedReader;
    1.11 +import java.io.FileReader;
    1.12 +import javax.mail.internet.InternetAddress;
    1.13 +
    1.14 +/**
    1.15 + * <p>
    1.16 + * Toto je jakýsi „skript“ pro zvláštní případy, kdy potřebujeme poslat hromadný e-mail,
    1.17 + * ale každý příjemce má dostat jiný text. 
    1.18 + * Resp. text každého e-mailu je parametrizován – dosazením jedné hodnoty za zástupný symbol.
    1.19 + * </p>
    1.20 + *
    1.21 + * <p>
    1.22 + * Text zprávy načteme ze souboru, stejně jako seznam příjemců a příslušných parametrů.
    1.23 + * Ostatní údaje se nastavují pomocí konstant níže.
    1.24 + * </p>
    1.25 + *
    1.26 + * <p>
    1.27 + * Nápady na vylepšení (TODO):
    1.28 + * </p>
    1.29 + * <ul>
    1.30 + * <li>Umožnit zadat více než jeden parametr</li>
    1.31 + * <li>Načítat nastavení (server, port atd.) ze souboru (jako to dělá SuperPošťák)</li>
    1.32 + * <li>Zapracovat do GUI SuperPošťáka</li>
    1.33 + * </ul>
    1.34 + *
    1.35 + * <p>
    1.36 + * Pozor na poměrně intenzivní SMTP komunikaci – posílá se tolik e-mailů, kolik je příjemců,
    1.37 + * ne jako u klasických hromadných zpráv, kde e-mail má řádové 500 nebo 1000 příjemců
    1.38 + * (a rozdělí se až na serveru).
    1.39 + * </p>
    1.40 + */
    1.41 +public class Individuální {
    1.42 +
    1.43 +	private static final String SERVER = "localhost";
    1.44 +	private static final int PORT = 2525;
    1.45 +	/** Soubor obsahující text e-mailu */
    1.46 +	private static final String TEXT_EMAILU = "/tmp/email.txt";
    1.47 +	/** Slovo v textu zprávy, které bude nahrazeno parametrem */
    1.48 +	private static final String TEXT_EMAILU_ZÁSTUPNÝ_SYMBOL = "<nahradit>";
    1.49 +	/** Soubor obsahující seznam příjemců (e-mailových adres) a parametrů, které se dosadí do textu */
    1.50 +	private static final String PŘÍJEMCI = "/tmp/emaily.csv";
    1.51 +	private static final String PŘÍJEMCI_ODDĚLOVAČ = "\t";
    1.52 +	private static final String PŘEDMĚT = "Předmět e-mailu";
    1.53 +	private static final String ODESÍLATEL_ADRESA = "test@example.com";
    1.54 +	private static final String ODESÍLATEL_JMÉNO = "Jméno Příjmení";
    1.55 +
    1.56 +
    1.57 +
    1.58 +	public static void main(String[] args) throws Exception {
    1.59 +		/** Inicializace nastavení a pošťáka */
    1.60 +		Nastaveni nastavení = new Nastaveni();
    1.61 +		nastavení.setPostovniServer(SERVER);
    1.62 +		nastavení.setPostovniPort(PORT);
    1.63 +		Postak pošťák = new Postak(nastavení);
    1.64 +
    1.65 +		/** Načteme text zprávy ze souboru */
    1.66 +		BufferedReader emailTxt = new BufferedReader(new FileReader(TEXT_EMAILU));
    1.67 +		StringBuilder text = new StringBuilder();
    1.68 +		while (emailTxt.ready()) {
    1.69 +			text.append(emailTxt.readLine());
    1.70 +			text.append("\n");
    1.71 +		}
    1.72 +
    1.73 +		/** Načteme příjemce a jejich parametry ze souboru… */
    1.74 +		BufferedReader příjemci = new BufferedReader(new FileReader(PŘÍJEMCI));
    1.75 +		while (příjemci.ready()) {
    1.76 +			String[] řádka = příjemci.readLine().split(PŘÍJEMCI_ODDĚLOVAČ);
    1.77 +			String email = řádka[0];
    1.78 +			String kód = řádka[1];
    1.79 +			/** …a pošleme jim e-mail */
    1.80 +			odešliEmail(pošťák, text.toString(), email, kód);
    1.81 +		}
    1.82 +	}
    1.83 +
    1.84 +	private static void odešliEmail(Postak pošťák, String textZprávy, String emailPříjemce, String parametr) throws Exception {
    1.85 +		System.out.println("Posíláme e-mail – příjemce: " + emailPříjemce + " + parametr: " + parametr);
    1.86 +		HromadnaZprava zpráva = new HromadnaZprava();
    1.87 +		zpráva.setPredmet(PŘEDMĚT);
    1.88 +		zpráva.setOdesilatel(new InternetAddress(ODESÍLATEL_ADRESA, ODESÍLATEL_JMÉNO));
    1.89 +		zpráva.getPrijemci().add(new InternetAddressKomu(emailPříjemce, null));
    1.90 +		/** Parametrizujeme text zprávy */
    1.91 +		textZprávy = textZprávy.replaceAll(TEXT_EMAILU_ZÁSTUPNÝ_SYMBOL, parametr);
    1.92 +		zpráva.setText(textZprávy);
    1.93 +		pošťák.odesli(zpráva);
    1.94 +	}
    1.95 +}