1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.kcb.service.impl;
17  
18  import javax.mail.internet.AddressException;
19  import javax.mail.internet.InternetAddress;
20  
21  import org.apache.commons.lang.StringUtils;
22  import org.apache.log4j.Logger;
23  import org.kuali.rice.core.mail.EmailBody;
24  import org.kuali.rice.core.mail.EmailFrom;
25  import org.kuali.rice.core.mail.EmailSubject;
26  import org.kuali.rice.core.mail.EmailTo;
27  import org.kuali.rice.core.mail.Mailer;
28  import org.kuali.rice.kcb.bo.Message;
29  import org.kuali.rice.kcb.bo.MessageDelivery;
30  import org.kuali.rice.kcb.service.EmailService;
31  import org.kuali.rice.ken.util.NotificationConstants;
32  import org.kuali.rice.kew.service.KEWServiceLocator;
33  import org.springframework.beans.factory.annotation.Required;
34  
35  
36  
37  
38  
39  
40  public class EmailServiceImpl implements EmailService {
41  
42  	private static Logger LOG = Logger.getLogger(EmailServiceImpl.class);
43  
44  	private static final String FORMAT_TEXT_HTML = "text/html";
45  	private static final String FORMAT_TEXT_PLAIN = "text/plain";
46  
47      
48      private String weburl;
49      private String defaultSender = "kcb@localhost";
50  
51      private final String DETAILACTION = "DetailView.form";
52      
53      private Mailer mailer;
54      
55      public void setMailer(Mailer mailer){
56      	this.mailer = mailer;
57      }
58  
59      
60  
61  
62  
63      @Required
64      public void setWeburl(String weburl) {
65          this.weburl = weburl;
66      }
67  
68      
69  
70  
71  
72  
73      public void setDefaultSender(String defaultSender) {
74          this.defaultSender = defaultSender;
75      }
76  
77      
78  
79  
80  
81      public Long sendEmail(MessageDelivery messageDelivery, String recipientEmailAddress, String emailFormat) throws Exception {
82          
83          
84  
85          Message message = messageDelivery.getMessage();
86          String channelName = message.getChannel();
87  
88          String producer = message.getProducer();
89          String sender = defaultSender;
90          if (producer != null) {
91              try {
92                  InternetAddress[] addresses = InternetAddress.parse(producer, false);
93                  if (addresses.length > 0) {
94                      sender = addresses[0].toString();
95                  }
96              } catch (AddressException ae) {
97                  
98              }
99          }
100 
101         String title = messageDelivery.getMessage().getTitle();
102         String subject = (channelName == null ? "" : channelName + " ") + (!StringUtils.isBlank(title) ? " - " + title : "");
103 
104         String format = FORMAT_TEXT_PLAIN;
105         String linebreak = "\n\n";
106 
107         
108         
109         
110         String link = weburl +"/"+ DETAILACTION +"?" 
111         + NotificationConstants.NOTIFICATION_CONTROLLER_CONSTANTS.MSG_DELIVERY_ID +"="+ messageDelivery.getId();
112 
113         if (emailFormat == null || emailFormat.equals("text")) {
114         	
115         } else {  
116             format = FORMAT_TEXT_HTML;
117             link = "<a href='"+ link +"'>Notification Detail</a>";
118             linebreak = "<br /><br />";
119         }
120 
121         LOG.debug("link: "+link);
122 
123         
124         StringBuffer sb = new StringBuffer();
125         sb.append("You have a new notification. Click the link below to review its details.");
126         sb.append(linebreak);
127         sb.append(linebreak);
128         sb.append(link);
129         String content = sb.toString();
130 
131         LOG.debug("subject: "+subject);
132         LOG.debug("sender: "+sender);
133         LOG.debug("recipient: "+recipientEmailAddress);
134         LOG.debug("content: "+content);
135 
136         
137         mailer.sendEmail(new EmailFrom(sender), new EmailTo(recipientEmailAddress), new EmailSubject(subject), new EmailBody(content), !FORMAT_TEXT_PLAIN.equals(format));
138 
139         return null;
140     }
141 }