View Javadoc

1   package de.tivsource.page.helper;
2   
3   import java.io.UnsupportedEncodingException;
4   import java.text.MessageFormat;
5   
6   import javax.mail.Message;
7   import javax.mail.MessagingException;
8   import javax.mail.Session;
9   import javax.mail.Transport;
10  import javax.mail.internet.AddressException;
11  import javax.mail.internet.InternetAddress;
12  import javax.mail.internet.MimeBodyPart;
13  import javax.mail.internet.MimeMessage;
14  import javax.mail.internet.MimeMultipart;
15  import javax.mail.internet.MimeUtility;
16  
17  
18  public class EmailSender {
19  
20      public void send(String fromName, EmailTemplate template, Object[] arguments,
21              Session session) throws AddressException, MessagingException,
22              UnsupportedEncodingException {
23  
24          /*
25           * Erzeuge neue Nachricht.
26           */
27          MimeMessage message = new MimeMessage(session);
28  
29          /*
30           * Setze Absender und Empfänger aus dem Template.
31           */
32          message.setFrom(new InternetAddress(template.getFrom(), fromName));
33          message.addRecipients(Message.RecipientType.TO,
34                  template.getToAddresses());
35          message.addRecipients(Message.RecipientType.CC,
36                  template.getCcAddresses());
37          message.addRecipients(Message.RecipientType.BCC,
38                  template.getBccAddresses());
39  
40          // Setze die ReplyTo Adresse
41          message.setReplyTo(new javax.mail.Address[]{
42                  new InternetAddress(
43                          (String)arguments[3]
44                  )
45          });
46          
47          /*
48           * Setze Subject in die Nachricht
49           */
50          message.setSubject(
51              // Codiere das Subject der Nachricht
52              MimeUtility.encodeText(
53                  // Setze Variablen in den Betreff der Nachricht.
54                  MessageFormat.format(template.getSubject(), arguments),"UTF-8", "Q"), 
55                  "UTF-8");
56  
57          /*
58           * Erzeugen des Mantels, enthält als einziges Element die Hülle. Dies
59           * ist nötig damit die Bilder eingebettet werden können.
60           */
61          MimeBodyPart mantle = new MimeBodyPart();
62  
63          /*
64           * Erzeugen der Hülle für Text und HTML. Ist vom Type "alternative" und
65           * zeigt zuerst das an in den Voreinstellungen des EMail-Reader
66           * eingestellt wurde.
67           */
68          MimeMultipart cover = new MimeMultipart("alternative");
69  
70          // Erzeugen des Text-Teils
71          MimeBodyPart text = new MimeBodyPart();
72  
73          // Hinzufügen des Text-Teils zur Hülle.
74          cover.addBodyPart(text);
75  
76          // Erzeugen des HTML-Teils.
77          MimeBodyPart html = new MimeBodyPart();
78  
79          // Hinzufügen des HTML-Teils zur Hülle.
80          cover.addBodyPart(html);
81  
82          // Füge das Cover dem Mantel hinzu.
83          mantle.setContent(cover);
84  
85          /*
86           * Setze den HTML-Inhalt aus dem Template in das HTML-Element. Setze das
87           * Transfer-Encoding des HMTL-Elements.
88           */
89          html.setContent(MessageFormat.format(template.getHtml(), arguments),
90                  "text/html; charset=UTF-8");
91          html.setHeader("Content-Transfer-Encoding", "8bit");
92  
93          /*
94           * Setze den Text-Inhalt aus dem Template in das Text-Element. Setze das
95           * Transfer-Encoding des Text-Elements.
96           */
97          text.setText(MessageFormat.format(template.getBody(), arguments));
98          text.setHeader("Content-Transfer-Encoding", "8bit");
99  
100         // Erzeugen Nachrichten Inhalts-Element der Teil der die Bilder und den
101         // Mantel enthält.
102         MimeMultipart content = new MimeMultipart("related");
103 
104         // Setze den Inhalt in die Nachricht.
105         message.setContent(content);
106 
107         // Setze den Setze den Mantel in das Inhalts-Element.
108         content.addBodyPart(mantle);
109 
110         // Setze das Transfer-Encoding der gesamten Nachricht.
111         message.setHeader("Content-Transfer-Encoding", "8bit");
112 
113         // Speichere die Änderungen.
114         message.saveChanges();
115 
116         // Sende die Nachricht.
117         Transport.send(message);
118     }
119 
120 
121 
122 } // Ende class.