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 +}