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