Subversion Repositories bacoAlunos

Rev

Rev 363 | Rev 440 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
29 jmachado 1
package pt.estgp.estgweb.services.email;
2
 
236 jmachado 3
import jomm.utils.TemplateUtils;
4
import org.apache.log4j.Logger;
5
import pt.estgp.estgweb.Globals;
358 jmachado 6
import pt.estgp.estgweb.web.utils.DatesUtils;
236 jmachado 7
import pt.estgp.estgweb.services.expceptions.ServiceException;
8
import pt.estgp.estgweb.domain.enums.LangEnum;
363 jmachado 9
import pt.estgp.estgweb.domain.*;
236 jmachado 10
import pt.estgp.estgweb.utils.Email;
11
import pt.utl.ist.berserk.logic.serviceManager.IService;
12
 
13
import javax.mail.MessagingException;
14
import javax.mail.Session;
15
import javax.mail.Message;
16
import javax.mail.Transport;
17
import javax.mail.internet.MimeMessage;
18
import javax.mail.internet.InternetAddress;
19
import java.util.ArrayList;
29 jmachado 20
import java.util.List;
236 jmachado 21
import java.util.Properties;
22
import java.text.MessageFormat;
29 jmachado 23
 
24
/**
25
 * @author Jorge Machado
26
 * @date 20/Mar/2008
27
 * @time 18:31:00
28
 * @see pt.estgp.estgweb.services.email
29
 */
236 jmachado 30
public class SendEmailService implements IService
29 jmachado 31
{
236 jmachado 32
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(SendEmailService.class);
33
 
34
    private static final 1.5.0/docs/api/java/lang/String.html">String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE;
35
 
36
    public void sendEmail(Email email) throws ServiceException
29 jmachado 37
    {
236 jmachado 38
        try{
39
 
40
            // Set up properties for mail session
41
            1.5.0/docs/api/java/util/Properties.html">Properties props = 1.5.0/docs/api/java/lang/System.html">System.getProperties();
42
            props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
43
 
44
            // Get session
45
            Session session = Session.getDefaultInstance(props, null);
46
 
47
            // Create message
48
            MimeMessage message = new MimeMessage(session);
49
            // Set the recipients of the message
298 jmachado 50
            boolean valid = false;
51
            for (1.5.0/docs/api/java/lang/String.html">String recipient : email.getRecipients())
52
            {
53
                if(Email.validEmail(recipient))
54
                {
55
                    valid=true;
419 jmachado 56
                    message.addRecipient(email.getType(),new InternetAddress(recipient));
298 jmachado 57
                }
236 jmachado 58
            }
298 jmachado 59
            if(valid)
60
            {
61
                1.5.0/docs/api/java/lang/String.html">String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName());
62
                // Format the mail message
63
                1.5.0/docs/api/java/lang/String.html">String fullMessage = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(content, email.getArguments().toArray());
236 jmachado 64
 
298 jmachado 65
                message.setFrom(new InternetAddress(email.getFrom()));
66
                message.setSubject(email.getSubject());
67
                message.setText(fullMessage);
236 jmachado 68
 
298 jmachado 69
                Transport.send(message);
70
            }
236 jmachado 71
        }
72
        catch(MessagingException e)
73
        {
74
            logger.error(e,e);
75
            throw new ServiceException(e.toString());
76
        }
29 jmachado 77
    }
236 jmachado 78
 
79
    public Email getSendUrlToFriendEmail(1.5.0/docs/api/java/lang/String.html">String url, 1.5.0/docs/api/java/lang/String.html">String from, LangEnum langEnum, List<String> recipients)
80
    {
81
        List<String> arguments = new ArrayList<String>();
82
        arguments.add(from);
83
        arguments.add(url);
84
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
85
        1.5.0/docs/api/java/lang/String.html">String template;
86
 
87
        if(langEnum == LangEnum.PORTUGUESE)
88
        {
89
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_PT;
237 jmachado 90
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_PT;
236 jmachado 91
        }
92
        else
93
        {
94
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_EN;
237 jmachado 95
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_EN;
236 jmachado 96
        }
97
 
98
        1.5.0/docs/api/java/lang/String.html">String subject = java.text.1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(subjectTxt,new 1.5.0/docs/api/java/lang/String.html">String[]{from});
99
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
100
    }
101
 
102
    public boolean sendUrlToFriend(1.5.0/docs/api/java/lang/String.html">String url, 1.5.0/docs/api/java/lang/String.html">String from, LangEnum langEnum, List<String> recipients)
103
    {
104
        try
105
        {
106
            sendEmail(getSendUrlToFriendEmail(url,from,langEnum,recipients));
107
            return true;
108
        }
109
        catch (ServiceException e)
110
        {
111
            return false;
112
        }
113
    }
114
 
237 jmachado 115
    public boolean sendCourseUnitAnnouncement(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
116
    {
117
        try
118
        {
119
            sendEmail(getCourseUnitAnnouncementEmail(announcement,langEnum,from,users));
120
            return true;
121
        }
122
        catch (ServiceException e)
123
        {
124
            return false;
125
        }
126
    }
236 jmachado 127
 
237 jmachado 128
    public Email getCourseUnitAnnouncementEmail(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
129
    {
130
        List<String> arguments = new ArrayList<String>();
131
        arguments.add(announcement.getCourseUnit().getName());
132
        arguments.add(announcement.getTitle());
133
        arguments.add(announcement.getText());
134
        arguments.add(from);
135
 
136
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
137
        1.5.0/docs/api/java/lang/String.html">String template;
138
 
139
        if(langEnum == LangEnum.PORTUGUESE)
140
        {
141
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT;
142
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_PT;
143
        }
144
        else
145
        {
146
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN;
147
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_EN;
148
        }
149
 
150
        List<String> recipients = new ArrayList<String>();
151
        for(User u: users)
152
        {
298 jmachado 153
            if(Email.validEmail(u.getEmail()))
154
                recipients.add(u.getEmail());
419 jmachado 155
            if(Email.validEmail(u.getOutEmail()))
156
                recipients.add(u.getOutEmail());
237 jmachado 157
        }
158
 
159
        1.5.0/docs/api/java/lang/String.html">String subject = java.text.1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(subjectTxt,new 1.5.0/docs/api/java/lang/String.html">String[]{announcement.getCourseUnit().getNormalizedName(),announcement.getTitle()});
419 jmachado 160
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
161
        if(announcement.getOwner() != null && Email.validEmail(announcement.getOwner().getEmail()))
162
            fromEmail = announcement.getOwner().getEmail();
163
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
237 jmachado 164
    }
165
 
363 jmachado 166
    public Email getCourseUnitBlogPostEmail(BlogPost post, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
167
    {
168
        List<String> arguments = new ArrayList<String>();
169
        arguments.add(((CourseUnitBlog)post.getBlog()).getCourseUnit().getName());
170
        arguments.add(post.getTitle());
171
        arguments.add(post.getText());
172
        arguments.add(from);
237 jmachado 173
 
363 jmachado 174
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
175
        1.5.0/docs/api/java/lang/String.html">String template;
176
 
177
        if(langEnum == LangEnum.PORTUGUESE)
178
        {
179
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT;
180
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT;
181
        }
182
        else
183
        {
184
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN;
185
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN;
186
        }
187
 
188
        List<String> recipients = new ArrayList<String>();
189
        for(User u: users)
190
        {
191
            if(Email.validEmail(u.getEmail()))
192
                recipients.add(u.getEmail());
419 jmachado 193
            if(Email.validEmail(u.getOutEmail()))
194
                recipients.add(u.getOutEmail());
363 jmachado 195
        }
196
 
197
        1.5.0/docs/api/java/lang/String.html">String subject = java.text.1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(subjectTxt,new 1.5.0/docs/api/java/lang/String.html">String[]{((CourseUnitBlog)post.getBlog()).getCourseUnit().getNormalizedName(),post.getTitle()});
419 jmachado 198
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
199
        if(post.getOwner() != null && Email.validEmail(post.getOwner().getEmail()))
200
            fromEmail = post.getOwner().getEmail();
201
        return new Email(subject ,recipients, fromEmail, template,arguments,Message.RecipientType.BCC);
363 jmachado 202
    }
203
 
419 jmachado 204
    public Email getCourseUnitWorkEmail(CourseUnitAssignement assignement, LangEnum langEnum, UserSession userSession,  List<User> users)
205
    {
206
        List<String> arguments = new ArrayList<String>();
207
        arguments.add(assignement.getCourseUnit().getName());
208
        arguments.add(assignement.getTitle());
209
        arguments.add(assignement.getDescription());
210
        if(userSession != null && userSession.getName() != null)
211
            arguments.add(userSession.getName());
212
        else
213
            arguments.add("unknown");
363 jmachado 214
 
419 jmachado 215
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
216
        1.5.0/docs/api/java/lang/String.html">String template;
217
 
218
        if(langEnum == LangEnum.PORTUGUESE)
219
        {
220
            template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_PT;
221
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_PT;
222
        }
223
        else
224
        {
225
            template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_EN;
226
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_EN;
227
        }
228
 
229
        List<String> recipients = new ArrayList<String>();
230
        for(User u: users)
231
        {
232
            if(Email.validEmail(u.getEmail()))
233
                recipients.add(u.getEmail());
234
            if(Email.validEmail(u.getOutEmail()))
235
                recipients.add(u.getOutEmail());
236
        }
237
 
238
        1.5.0/docs/api/java/lang/String.html">String subject = java.text.1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(subjectTxt,new 1.5.0/docs/api/java/lang/String.html">String[]{assignement.getCourseUnit().getNormalizedName(),assignement.getTitle()});
239
 
240
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
241
        if(userSession!= null && userSession.getUser() != null && Email.validEmail(userSession.getUser().getEmail()))
242
            fromEmail = userSession.getUser().getEmail();
243
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
244
    }
245
 
246
 
247
 
236 jmachado 248
    public Email getNewGradesEmail(List<String[]> grades, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String studentEmail, 1.5.0/docs/api/java/lang/String.html">String studentName)
249
    {
250
        List<String> arguments = new ArrayList<String>();
251
 
252
        1.5.0/docs/api/java/lang/String.html">String subject;
253
        1.5.0/docs/api/java/lang/String.html">String template;
254
 
255
        if(langEnum == LangEnum.PORTUGUESE)
256
        {
257
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_PT;
237 jmachado 258
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_PT;
236 jmachado 259
        }
260
        else
261
        {
262
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_EN;
237 jmachado 263
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_EN;
236 jmachado 264
        }
265
 
266
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder gradesBuilder = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
267
        for(1.5.0/docs/api/java/lang/String.html">String[] grade:  grades)
268
        {
269
            1.5.0/docs/api/java/lang/String.html">String gradeTxt = TemplateUtils.formatMessageTemplate(gradeUnitTemplate,grade);
270
            gradesBuilder.append(gradeTxt);
271
        }
272
 
273
        arguments.add(studentName);
274
        arguments.add(gradesBuilder.toString());
275
 
276
        List<String> recipients = new ArrayList<String>();
277
        recipients.add(studentEmail);
278
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
279
    }
280
 
358 jmachado 281
    public Email getSummaryEmail(List<String> emails, CourseUnitSummary cUS, CourseUnit c, LangEnum langEnum)
282
    {
283
        List<String> arguments = new ArrayList<String>();
284
 
285
        1.5.0/docs/api/java/lang/String.html">String data = DatesUtils.getStringFromDate(cUS.getDataAula());
286
        1.5.0/docs/api/java/lang/String.html">String subject;
287
        1.5.0/docs/api/java/lang/String.html">String template;
288
 
289
        if(langEnum == LangEnum.PORTUGUESE)
290
        {
291
            template = Globals.EMAIL_SUMMARY_TEMPLATE_PT;
292
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
293
        }
294
        else
295
        {
296
            template = Globals.EMAIL_SUMMARY_TEMPLATE_EN;
297
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
298
        }
299
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
300
 
301
        arguments.add(c.getName());
302
        arguments.add(""+cUS.getNumeroAula());
303
        arguments.add(data);
304
        arguments.add(cUS.getTitulo());
305
        arguments.add(cUS.getDescricao());
306
 
307
        List<String> recipients = new ArrayList<String>();
308
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
309
            recipients.add(email);
310
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
311
    }
312
 
236 jmachado 313
    public boolean sendNewGrades(List<String[]> grades, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String studentEmail, 1.5.0/docs/api/java/lang/String.html">String studentName)
314
    {
315
        try
316
        {
317
            sendEmail(getNewGradesEmail(grades,langEnum,studentEmail,studentName));
318
            return true;
319
        }
320
        catch (ServiceException e)
321
        {
322
            return false;
323
        }
324
 
325
    }
326
 
327
    public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
328
    {
329
        List<String[]> grades = new ArrayList<String[]>();
330
        grades.add(new 1.5.0/docs/api/java/lang/String.html">String[]{"Teste","3"});
331
        grades.add(new 1.5.0/docs/api/java/lang/String.html">String[]{"Teste2","4"});
332
        new SendEmailService().sendNewGrades(grades,LangEnum.PORTUGUESE,"jmachado@estgp.pt","jorge Machado");
333
    }
334
 
29 jmachado 335
}