Subversion Repositories bacoAlunos

Rev

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