Subversion Repositories bacoAlunos

Rev

Rev 490 | Rev 512 | 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
 
71
                message.setHeader("Content-Type","text/plain; charset=\"utf-8\"");
72
                message.setHeader("Content-Transfer-Encoding", "quoted-printable");
492 jmachado 73
 
298 jmachado 74
                Transport.send(message);
75
            }
236 jmachado 76
        }
77
        catch(MessagingException e)
78
        {
79
            logger.error(e,e);
80
            throw new ServiceException(e.toString());
81
        }
29 jmachado 82
    }
236 jmachado 83
 
84
    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)
85
    {
86
        List<String> arguments = new ArrayList<String>();
87
        arguments.add(from);
88
        arguments.add(url);
89
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
90
        1.5.0/docs/api/java/lang/String.html">String template;
91
 
92
        if(langEnum == LangEnum.PORTUGUESE)
93
        {
94
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_PT;
237 jmachado 95
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_PT;
236 jmachado 96
        }
97
        else
98
        {
99
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_EN;
237 jmachado 100
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_EN;
236 jmachado 101
        }
102
 
103
        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});
104
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
105
    }
106
 
107
    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)
108
    {
109
        try
110
        {
111
            sendEmail(getSendUrlToFriendEmail(url,from,langEnum,recipients));
112
            return true;
113
        }
114
        catch (ServiceException e)
115
        {
116
            return false;
117
        }
118
    }
119
 
237 jmachado 120
    public boolean sendCourseUnitAnnouncement(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
121
    {
122
        try
123
        {
124
            sendEmail(getCourseUnitAnnouncementEmail(announcement,langEnum,from,users));
125
            return true;
126
        }
127
        catch (ServiceException e)
128
        {
129
            return false;
130
        }
131
    }
236 jmachado 132
 
237 jmachado 133
    public Email getCourseUnitAnnouncementEmail(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
134
    {
135
        List<String> arguments = new ArrayList<String>();
136
        arguments.add(announcement.getCourseUnit().getName());
137
        arguments.add(announcement.getTitle());
138
        arguments.add(announcement.getText());
139
        arguments.add(from);
140
 
141
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
142
        1.5.0/docs/api/java/lang/String.html">String template;
143
 
144
        if(langEnum == LangEnum.PORTUGUESE)
145
        {
146
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT;
147
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_PT;
148
        }
149
        else
150
        {
151
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN;
152
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_EN;
153
        }
154
 
155
        List<String> recipients = new ArrayList<String>();
156
        for(User u: users)
157
        {
298 jmachado 158
            if(Email.validEmail(u.getEmail()))
159
                recipients.add(u.getEmail());
419 jmachado 160
            if(Email.validEmail(u.getOutEmail()))
161
                recipients.add(u.getOutEmail());
237 jmachado 162
        }
163
 
164
        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 165
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
166
        if(announcement.getOwner() != null && Email.validEmail(announcement.getOwner().getEmail()))
167
            fromEmail = announcement.getOwner().getEmail();
168
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
237 jmachado 169
    }
170
 
363 jmachado 171
    public Email getCourseUnitBlogPostEmail(BlogPost post, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
172
    {
173
        List<String> arguments = new ArrayList<String>();
174
        arguments.add(((CourseUnitBlog)post.getBlog()).getCourseUnit().getName());
175
        arguments.add(post.getTitle());
176
        arguments.add(post.getText());
177
        arguments.add(from);
237 jmachado 178
 
363 jmachado 179
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
180
        1.5.0/docs/api/java/lang/String.html">String template;
181
 
182
        if(langEnum == LangEnum.PORTUGUESE)
183
        {
184
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT;
185
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT;
186
        }
187
        else
188
        {
189
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN;
190
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN;
191
        }
192
 
193
        List<String> recipients = new ArrayList<String>();
194
        for(User u: users)
195
        {
196
            if(Email.validEmail(u.getEmail()))
197
                recipients.add(u.getEmail());
419 jmachado 198
            if(Email.validEmail(u.getOutEmail()))
199
                recipients.add(u.getOutEmail());
363 jmachado 200
        }
201
 
202
        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 203
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
204
        if(post.getOwner() != null && Email.validEmail(post.getOwner().getEmail()))
205
            fromEmail = post.getOwner().getEmail();
206
        return new Email(subject ,recipients, fromEmail, template,arguments,Message.RecipientType.BCC);
363 jmachado 207
    }
208
 
440 jmachado 209
    public Email getCourseUnitWorkEmail(CourseUnitAssignement assignement, LangEnum langEnum, UserSession userSession,  List<User> users, boolean newWork)
419 jmachado 210
    {
211
        List<String> arguments = new ArrayList<String>();
212
        arguments.add(assignement.getCourseUnit().getName());
213
        arguments.add(assignement.getTitle());
214
        arguments.add(assignement.getDescription());
440 jmachado 215
 
419 jmachado 216
        if(userSession != null && userSession.getName() != null)
217
            arguments.add(userSession.getName());
218
        else
219
            arguments.add("unknown");
363 jmachado 220
 
440 jmachado 221
        arguments.add( DatesUtils.getStringFromDate(assignement.getDeliverDate()));
492 jmachado 222
 
419 jmachado 223
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
224
        1.5.0/docs/api/java/lang/String.html">String template;
225
 
226
        if(langEnum == LangEnum.PORTUGUESE)
227
        {
440 jmachado 228
            if(newWork)
229
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_PT;
230
            else
231
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_PT;
419 jmachado 232
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_PT;
233
        }
234
        else
235
        {
440 jmachado 236
            if(newWork)
237
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_EN;
238
            else
239
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_EN;
419 jmachado 240
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_EN;
241
        }
242
 
243
        List<String> recipients = new ArrayList<String>();
244
        for(User u: users)
245
        {
246
            if(Email.validEmail(u.getEmail()))
247
                recipients.add(u.getEmail());
248
            if(Email.validEmail(u.getOutEmail()))
249
                recipients.add(u.getOutEmail());
250
        }
251
 
252
        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()});
253
 
254
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
255
        if(userSession!= null && userSession.getUser() != null && Email.validEmail(userSession.getUser().getEmail()))
256
            fromEmail = userSession.getUser().getEmail();
257
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
258
    }
259
 
260
 
261
 
236 jmachado 262
    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)
263
    {
264
        List<String> arguments = new ArrayList<String>();
265
 
266
        1.5.0/docs/api/java/lang/String.html">String subject;
267
        1.5.0/docs/api/java/lang/String.html">String template;
268
 
269
        if(langEnum == LangEnum.PORTUGUESE)
270
        {
271
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_PT;
237 jmachado 272
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_PT;
236 jmachado 273
        }
274
        else
275
        {
276
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_EN;
237 jmachado 277
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_EN;
236 jmachado 278
        }
279
 
280
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder gradesBuilder = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
281
        for(1.5.0/docs/api/java/lang/String.html">String[] grade:  grades)
282
        {
283
            1.5.0/docs/api/java/lang/String.html">String gradeTxt = TemplateUtils.formatMessageTemplate(gradeUnitTemplate,grade);
284
            gradesBuilder.append(gradeTxt);
285
        }
286
 
287
        arguments.add(studentName);
288
        arguments.add(gradesBuilder.toString());
289
 
290
        List<String> recipients = new ArrayList<String>();
291
        recipients.add(studentEmail);
292
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
293
    }
294
 
358 jmachado 295
    public Email getSummaryEmail(List<String> emails, CourseUnitSummary cUS, CourseUnit c, LangEnum langEnum)
296
    {
297
        List<String> arguments = new ArrayList<String>();
298
 
299
        1.5.0/docs/api/java/lang/String.html">String data = DatesUtils.getStringFromDate(cUS.getDataAula());
300
        1.5.0/docs/api/java/lang/String.html">String subject;
301
        1.5.0/docs/api/java/lang/String.html">String template;
302
 
303
        if(langEnum == LangEnum.PORTUGUESE)
304
        {
305
            template = Globals.EMAIL_SUMMARY_TEMPLATE_PT;
306
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
307
        }
308
        else
309
        {
310
            template = Globals.EMAIL_SUMMARY_TEMPLATE_EN;
311
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
312
        }
313
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
314
 
315
        arguments.add(c.getName());
316
        arguments.add(""+cUS.getNumeroAula());
317
        arguments.add(data);
318
        arguments.add(cUS.getTitulo());
319
        arguments.add(cUS.getDescricao());
320
 
321
        List<String> recipients = new ArrayList<String>();
322
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
323
            recipients.add(email);
324
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
325
    }
326
 
236 jmachado 327
    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)
328
    {
329
        try
330
        {
331
            sendEmail(getNewGradesEmail(grades,langEnum,studentEmail,studentName));
332
            return true;
333
        }
334
        catch (ServiceException e)
335
        {
336
            return false;
337
        }
338
 
339
    }
340
 
341
    public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
342
    {
440 jmachado 343
        1.5.0/docs/api/java/lang/System.html">System.out.println( DatesUtils.getStringFromDate(new 5+0%2Fdocs%2Fapi+Date">Date()));
344
//        List<String[]> grades = new ArrayList<String[]>();
345
//        grades.add(new String[]{"Teste","3"});
346
//        grades.add(new String[]{"Teste2","4"});
347
//        new SendEmailService().sendNewGrades(grades,LangEnum.PORTUGUESE,"jmachado@estgp.pt","jorge Machado");
236 jmachado 348
    }
349
 
29 jmachado 350
}