java/Postak/src/cz/frantovo/postak/hack/Individuální.java
author František Kučera <franta-hg@frantovo.cz>
Wed Jan 05 14:20:16 2011 +0100 (2011-01-05)
changeset 9 6f7d2cc5380e
permissions -rw-r--r--
#7 Parametrizovatelné zprávy
     1 package cz.frantovo.postak.hack;
     2 
     3 import cz.frantovo.postak.HromadnaZprava;
     4 import cz.frantovo.postak.InternetAddressKomu;
     5 import cz.frantovo.postak.Nastaveni;
     6 import cz.frantovo.postak.Postak;
     7 import java.io.BufferedReader;
     8 import java.io.FileReader;
     9 import javax.mail.internet.InternetAddress;
    10 
    11 /**
    12  * <p>
    13  * Toto je jakýsi „skript“ pro zvláštní případy, kdy potřebujeme poslat hromadný e-mail,
    14  * ale každý příjemce má dostat jiný text. 
    15  * Resp. text každého e-mailu je parametrizován – dosazením jedné hodnoty za zástupný symbol.
    16  * </p>
    17  *
    18  * <p>
    19  * Text zprávy načteme ze souboru, stejně jako seznam příjemců a příslušných parametrů.
    20  * Ostatní údaje se nastavují pomocí konstant níže.
    21  * </p>
    22  *
    23  * <p>
    24  * Nápady na vylepšení (TODO):
    25  * </p>
    26  * <ul>
    27  * <li>Umožnit zadat více než jeden parametr</li>
    28  * <li>Načítat nastavení (server, port atd.) ze souboru (jako to dělá SuperPošťák)</li>
    29  * <li>Zapracovat do GUI SuperPošťáka</li>
    30  * </ul>
    31  *
    32  * <p>
    33  * Pozor na poměrně intenzivní SMTP komunikaci – posílá se tolik e-mailů, kolik je příjemců,
    34  * ne jako u klasických hromadných zpráv, kde e-mail má řádové 500 nebo 1000 příjemců
    35  * (a rozdělí se až na serveru).
    36  * </p>
    37  */
    38 public class Individuální {
    39 
    40 	private static final String SERVER = "localhost";
    41 	private static final int PORT = 2525;
    42 	/** Soubor obsahující text e-mailu */
    43 	private static final String TEXT_EMAILU = "/tmp/email.txt";
    44 	/** Slovo v textu zprávy, které bude nahrazeno parametrem */
    45 	private static final String TEXT_EMAILU_ZÁSTUPNÝ_SYMBOL = "<nahradit>";
    46 	/** Soubor obsahující seznam příjemců (e-mailových adres) a parametrů, které se dosadí do textu */
    47 	private static final String PŘÍJEMCI = "/tmp/emaily.csv";
    48 	private static final String PŘÍJEMCI_ODDĚLOVAČ = "\t";
    49 	private static final String PŘEDMĚT = "Předmět e-mailu";
    50 	private static final String ODESÍLATEL_ADRESA = "test@example.com";
    51 	private static final String ODESÍLATEL_JMÉNO = "Jméno Příjmení";
    52 
    53 
    54 
    55 	public static void main(String[] args) throws Exception {
    56 		/** Inicializace nastavení a pošťáka */
    57 		Nastaveni nastavení = new Nastaveni();
    58 		nastavení.setPostovniServer(SERVER);
    59 		nastavení.setPostovniPort(PORT);
    60 		Postak pošťák = new Postak(nastavení);
    61 
    62 		/** Načteme text zprávy ze souboru */
    63 		BufferedReader emailTxt = new BufferedReader(new FileReader(TEXT_EMAILU));
    64 		StringBuilder text = new StringBuilder();
    65 		while (emailTxt.ready()) {
    66 			text.append(emailTxt.readLine());
    67 			text.append("\n");
    68 		}
    69 
    70 		/** Načteme příjemce a jejich parametry ze souboru… */
    71 		BufferedReader příjemci = new BufferedReader(new FileReader(PŘÍJEMCI));
    72 		while (příjemci.ready()) {
    73 			String[] řádka = příjemci.readLine().split(PŘÍJEMCI_ODDĚLOVAČ);
    74 			String email = řádka[0];
    75 			String kód = řádka[1];
    76 			/** …a pošleme jim e-mail */
    77 			odešliEmail(pošťák, text.toString(), email, kód);
    78 		}
    79 	}
    80 
    81 	private static void odešliEmail(Postak pošťák, String textZprávy, String emailPříjemce, String parametr) throws Exception {
    82 		System.out.println("Posíláme e-mail – příjemce: " + emailPříjemce + " + parametr: " + parametr);
    83 		HromadnaZprava zpráva = new HromadnaZprava();
    84 		zpráva.setPredmet(PŘEDMĚT);
    85 		zpráva.setOdesilatel(new InternetAddress(ODESÍLATEL_ADRESA, ODESÍLATEL_JMÉNO));
    86 		zpráva.getPrijemci().add(new InternetAddressKomu(emailPříjemce, null));
    87 		/** Parametrizujeme text zprávy */
    88 		textZprávy = textZprávy.replaceAll(TEXT_EMAILU_ZÁSTUPNÝ_SYMBOL, parametr);
    89 		zpráva.setText(textZprávy);
    90 		pošťák.odesli(zpráva);
    91 	}
    92 }