[9] | 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 | } |
---|