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