Subversion Repositories bacoAlunos

Rev

Rev 1451 | Rev 1585 | 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;
929 jmachado 6
import pt.estgp.estgweb.domain.*;
7
import pt.estgp.estgweb.domain.enums.LangEnum;
1452 jmachado 8
import pt.estgp.estgweb.services.email.impl.EmailTransport;
9
import pt.estgp.estgweb.services.email.impl.EmailTransportPool;
929 jmachado 10
import pt.estgp.estgweb.services.expceptions.ServiceException;
751 jmachado 11
import pt.estgp.estgweb.utils.ConfigProperties;
929 jmachado 12
import pt.estgp.estgweb.utils.Email;
1429 jmachado 13
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;
358 jmachado 14
import pt.estgp.estgweb.web.utils.DatesUtils;
236 jmachado 15
import pt.utl.ist.berserk.logic.serviceManager.IService;
16
 
1452 jmachado 17
import javax.mail.Message;
18
import javax.mail.MessagingException;
929 jmachado 19
import javax.mail.internet.InternetAddress;
236 jmachado 20
import javax.mail.internet.MimeMessage;
872 jmachado 21
import java.io.UnsupportedEncodingException;
929 jmachado 22
import java.text.MessageFormat;
1452 jmachado 23
import java.util.ArrayList;
24
import java.util.Date;
25
import java.util.List;
29 jmachado 26
 
27
/**
28
 * @author Jorge Machado
29
 * @date 20/Mar/2008
30
 * @time 18:31:00
31
 * @see pt.estgp.estgweb.services.email
32
 */
236 jmachado 33
public class SendEmailService implements IService
29 jmachado 34
{
236 jmachado 35
    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);
36
 
37
    private static final 1.5.0/docs/api/java/lang/String.html">String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE;
38
 
1452 jmachado 39
    /*static String sendFromAddress;*/
1433 jmachado 40
 
41
    public SendEmailService() {
42
 
1436 jmachado 43
 
1433 jmachado 44
    }
45
 
1452 jmachado 46
    /*static String[] serverEmails;
1260 jmachado 47
    static int serverEmailPos = -1;
1451 jmachado 48
    static Session session = null;
49
    static Transport transport = null;
1260 jmachado 50
 
1445 jmachado 51
 
1436 jmachado 52
    static
53
    {
1260 jmachado 54
        serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT];
55
        for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++)
56
        {
57
            serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX;
58
        }
59
    }
1436 jmachado 60
 
1451 jmachado 61
    public static synchronized Transport getEmailTransport()
1436 jmachado 62
    {
1447 jmachado 63
 
1436 jmachado 64
 
1449 jmachado 65
        if(session == null || transport == null || !transport.isConnected())
66
        {
67
            sendFromAddress = Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN ?
68
                    getRoundRobinEmailUser() : Globals.SYSTEM_EMAIL_BOX;
69
 
1452 jmachado 70
            logger.info("CONNECTION TO TRANSPORT FAIL WILL REOPEN : " + sendFromAddress + " using round robin: " + Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN);
1449 jmachado 71
        }
72
        else
1452 jmachado 73
        {
74
            System.out.println("TRANSPORT OK RETURNING");
1449 jmachado 75
            return transport;
1452 jmachado 76
        }
1449 jmachado 77
 
78
 
79
 
1452 jmachado 80
 
1436 jmachado 81
        // Set up properties for mail session
1450 jmachado 82
        //Properties props = System.getProperties();
83
        Properties props = new Properties();
1436 jmachado 84
        props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
1450 jmachado 85
        props.setProperty("mail.transport.protocol", "smtp");//todo new
1436 jmachado 86
        final String username = Globals.EMAIL_SERVER_USERNAME;
87
        final String password = Globals.EMAIL_SERVER_PASSWORD;
88
        javax.mail.Authenticator authenticator = null;
89
        if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0)
90
        {
91
            logger.info("Using Email Security TLS");
1440 jmachado 92
 
1436 jmachado 93
            props.put("mail.smtp.auth", "true");
94
            props.put("mail.smtp.starttls.enable", "true");
95
            props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS);
96
            authenticator = new javax.mail.Authenticator() {
97
 
98
                protected PasswordAuthentication getPasswordAuthentication() {
99
                    System.out.println("Email from:" + sendFromAddress + " pass:" + password);
100
                    return new PasswordAuthentication(sendFromAddress, password);
101
                }
102
            };
103
        }
104
        else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0)
105
        {
106
            logger.info("Using Email Security SSL");
1440 jmachado 107
 
1436 jmachado 108
            props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL);
109
            props.put("mail.smtp.socketFactory.class",
110
                    "javax.net.ssl.SSLSocketFactory");
111
            props.put("mail.smtp.auth", "true");
112
            props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL);
113
            authenticator = new javax.mail.Authenticator() {
114
                protected PasswordAuthentication getPasswordAuthentication() {
115
                    System.out.println("Email from:" + sendFromAddress + " pass:" + password);
116
 
117
                    return new PasswordAuthentication(sendFromAddress,password);
118
                }
119
            };
120
        }
121
        else
122
        {
123
 
124
        }
125
 
126
 
127
 
128
        System.out.println("Autenticator != null :" + (authenticator != null));
129
        // Get session
1452 jmachado 130
        //Session session = authenticator != null ?
131
        //        Session.getDefaultInstance(props, authenticator)
132
        //        : Session.getDefaultInstance(props) ;
1436 jmachado 133
 
1452 jmachado 134
 
1449 jmachado 135
        session = authenticator != null ?
1436 jmachado 136
                Session.getInstance(props, authenticator)
1447 jmachado 137
                : Session.getInstance(props) ;
1436 jmachado 138
 
139
        try {
1449 jmachado 140
 
1443 jmachado 141
            System.out.println("toString:" + session.getTransport("smtp").toString());
1449 jmachado 142
            transport = session.getTransport("smtp");
143
            System.out.println("before connect isConnected:" + transport.isConnected());
1448 jmachado 144
            transport.connect();
1449 jmachado 145
            System.out.println("after connect isConnected:" + transport.isConnected());
1436 jmachado 146
        } catch (MessagingException e) {
147
            logger.error(e,e);
1449 jmachado 148
            return null;
1436 jmachado 149
        }
150
 
151
        session.setDebug(true);
152
        session.setDebugOut(System.out);
1449 jmachado 153
        return transport;
1436 jmachado 154
 
155
    }
1260 jmachado 156
    private static synchronized String getRoundRobinEmailUser()
157
    {
158
        serverEmailPos++;
159
        if(serverEmailPos >= Globals.EMAIL_SERVER_USER_COUNT)
160
        {
161
            serverEmailPos = 0;
162
        }
163
        return serverEmails[serverEmailPos];
164
    }
1452 jmachado 165
    */
1429 jmachado 166
 
236 jmachado 167
    public void sendEmail(Email email) throws ServiceException
29 jmachado 168
    {
1429 jmachado 169
        sendEmail(email,null,null);
170
    }
171
    public void sendEmail(Email email,1.5.0/docs/api/java/lang/String.html">String url,1.5.0/docs/api/java/lang/String.html">String nome) throws ServiceException
172
    {
1426 jmachado 173
        if(Globals.TEST_ENVIRONEMENT && !email.isSystemAssumingTestEmail())
1312 jmachado 174
        {
175
            1.5.0/docs/api/java/lang/String.html">String warn = "System in TEST Environement - will not send EMAIL";
176
            logger.warn(warn);
177
            return;
178
        }
236 jmachado 179
        try{
180
 
1452 jmachado 181
            //Transport transport = getEmailTransport();
182
            //MimeMessage message = new MimeMessage(session);
1431 jmachado 183
 
1452 jmachado 184
            EmailTransport emailTransport = EmailTransportPool.getInstance().getAvailableTransportFromPool();
185
            MimeMessage message = new MimeMessage(emailTransport.getSession());
186
 
187
 
188
 
189
 
236 jmachado 190
            // Set the recipients of the message
298 jmachado 191
            boolean valid = false;
192
            for (1.5.0/docs/api/java/lang/String.html">String recipient : email.getRecipients())
193
            {
194
                if(Email.validEmail(recipient))
195
                {
196
                    valid=true;
1429 jmachado 197
                    message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient));
1427 jmachado 198
                    logger.info("Adding recipient (" + email.getType().toString() + ") to transport:"+recipient);
298 jmachado 199
                }
236 jmachado 200
            }
1429 jmachado 201
 
202
            if(email.getRecipientsCC() != null)
203
            {
204
                for (1.5.0/docs/api/java/lang/String.html">String recipient : email.getRecipientsCC())
205
                {
206
                    if(Email.validEmail(recipient))
207
                    {
208
                        //valid=true;
209
                        message.addRecipient(Message.RecipientType.CC,new InternetAddress(recipient));
210
                        logger.info("Adding recipient CC (" + email.getType().toString() + ") to transport:"+recipient);
211
                    }
212
                }
213
            }
298 jmachado 214
            if(valid)
215
            {
811 jmachado 216
 
1426 jmachado 217
                1.5.0/docs/api/java/lang/String.html">String fullMessage = getEmailTextMessage(email);
236 jmachado 218
 
1429 jmachado 219
                if(url != null && nome != null)
220
                {
221
                    logger.info("Requesting certificated Email, will replace fields in template");
222
                    fullMessage = fullMessage.replaceAll("@USER_NOME@",nome);
223
                    fullMessage = fullMessage.replaceAll("@URL@",url);
224
                }
935 jmachado 225
 
226
 
1429 jmachado 227
 
1452 jmachado 228
                logger.info("FROM:" + email.getFrom() + " but using: " + emailTransport.getSendFromAddress());
932 jmachado 229
                //if(email.getFromName() != null)
872 jmachado 230
                    try {
1452 jmachado 231
                        message.setFrom(new InternetAddress(emailTransport.getSendFromAddress(),emailTransport.getSendFromAddress()));
872 jmachado 232
                    } catch (1.5.0/docs/api/java/io/UnsupportedEncodingException.html">UnsupportedEncodingException e) {
233
                        logger.error(e,e);
1260 jmachado 234
                        //message.setFrom(new InternetAddress(sendFromAddress));
872 jmachado 235
                    }
932 jmachado 236
                //else
237
                //    message.setFrom(new InternetAddress(Globals.SYSTEM_EMAIL_BOX));
1269 jmachado 238
                message.setSubject(email.getSubject() + " - não responda para este endereço","utf-8");
936 jmachado 239
 
240
                if(email.isHtml())
241
                {
242
 
992 jmachado 243
                    fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ?  "<br/><br/>Responda para " + email.getFrom() : "<br/><br/>Por favor não responda a este email";
1425 jmachado 244
                    fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api </h5>";
936 jmachado 245
 
246
                }
247
                else
248
                {
992 jmachado 249
                    fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ? "\n\nResponda para " + email.getFrom() : "\n\nPor favor não responda a este email";
1425 jmachado 250
                    fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api ";
936 jmachado 251
                }
252
 
492 jmachado 253
                message.setText(fullMessage,"utf-8");
236 jmachado 254
 
490 jmachado 255
 
512 jmachado 256
                if(email.isHtml())
935 jmachado 257
                {
512 jmachado 258
                    message.setHeader("Content-Type","text/html; charset=\"utf-8\"");
935 jmachado 259
                }
512 jmachado 260
                else
935 jmachado 261
                {
512 jmachado 262
                    message.setHeader("Content-Type","text/plain; charset=\"utf-8\"");
935 jmachado 263
                }
490 jmachado 264
                message.setHeader("Content-Transfer-Encoding", "quoted-printable");
811 jmachado 265
                logger.info("Sending email to transport:"+fullMessage);
492 jmachado 266
 
811 jmachado 267
 
933 jmachado 268
 
1452 jmachado 269
                emailTransport.getTransport().send(message);
1444 jmachado 270
                //session.getTransport("smtp").sendMessage(message,message.getAllRecipients());
1434 jmachado 271
                //session.getTransport().close();
298 jmachado 272
            }
236 jmachado 273
        }
274
        catch(MessagingException e)
275
        {
276
            logger.error(e,e);
277
            throw new ServiceException(e.toString());
278
        }
29 jmachado 279
    }
236 jmachado 280
 
1426 jmachado 281
    private static 1.5.0/docs/api/java/lang/String.html">String getEmailTextMessage(Email email)
282
    {
283
        return getEmailTextMessage( email.getEmailTemplateName(), email.getArguments().toArray());
284
    }
285
 
286
    public static 1.5.0/docs/api/java/lang/String.html">String getEmailTextMessage(1.5.0/docs/api/java/lang/String.html">String template,List<String> arguments)
287
    {
288
        return getEmailTextMessage(template, arguments.toArray());
289
    }
290
    public static 1.5.0/docs/api/java/lang/String.html">String getEmailTextMessage(1.5.0/docs/api/java/lang/String.html">String template,5+0%2Fdocs%2Fapi+Object">Object[] arguments)
291
    {
292
        1.5.0/docs/api/java/lang/String.html">String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" +template);
293
        // Format the mail message
294
        return 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(content, arguments);
295
    }
296
 
236 jmachado 297
    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)
298
    {
299
        List<String> arguments = new ArrayList<String>();
300
        arguments.add(from);
301
        arguments.add(url);
302
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
303
        1.5.0/docs/api/java/lang/String.html">String template;
304
 
305
        if(langEnum == LangEnum.PORTUGUESE)
306
        {
307
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_PT;
237 jmachado 308
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_PT;
236 jmachado 309
        }
310
        else
311
        {
312
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_EN;
237 jmachado 313
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_EN;
236 jmachado 314
        }
315
 
316
        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});
317
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
318
    }
319
 
320
    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)
321
    {
322
        try
323
        {
324
            sendEmail(getSendUrlToFriendEmail(url,from,langEnum,recipients));
325
            return true;
326
        }
327
        catch (ServiceException e)
328
        {
329
            return false;
330
        }
331
    }
332
 
237 jmachado 333
    public boolean sendCourseUnitAnnouncement(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
334
    {
335
        try
336
        {
337
            sendEmail(getCourseUnitAnnouncementEmail(announcement,langEnum,from,users));
338
            return true;
339
        }
340
        catch (ServiceException e)
341
        {
342
            return false;
343
        }
344
    }
236 jmachado 345
 
1089 jmachado 346
    public static class SendTo
512 jmachado 347
    {
1089 jmachado 348
        public 1.5.0/docs/api/java/lang/String.html">String name;
349
        public 1.5.0/docs/api/java/lang/String.html">String email;
350
        public 1.5.0/docs/api/java/lang/String.html">String outEmail;
351
    }
352
 
353
    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<String> emails, User user)
354
    {
1260 jmachado 355
        return getMessageEmailAdulteredFromEmail(null,from,subject,text,langEnum,target,emails,user);
356
    }
357
 
358
    public Email getMessageEmailAdulteredFromEmail(1.5.0/docs/api/java/lang/String.html">String fromEmail, 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<String> emails, User user)
359
    {
512 jmachado 360
//        # 0 : From
361
//        # 1 : Subject
362
//        # 2 : Text
363
//        # 3 : person
364
//        # 4 : target
365
        List<String> arguments = new ArrayList<String>();
366
        arguments.add(from);
367
        arguments.add(subject);
368
        arguments.add(text);
369
        arguments.add(user.getName());
370
        arguments.add(target);
1260 jmachado 371
        arguments.add(fromEmail);
512 jmachado 372
 
373
        1.5.0/docs/api/java/lang/String.html">String template;
374
 
375
        if(langEnum == LangEnum.PORTUGUESE)
376
        {
377
            template = Globals.EMAIL_MESSAGE_TEMPLATE_PT;
378
        }
379
        else
380
        {
381
            template = Globals.EMAIL_MESSAGE_TEMPLATE_EN;
382
        }
383
 
384
        List<String> recipients = new ArrayList<String>();
1089 jmachado 385
        for(1.5.0/docs/api/java/lang/String.html">String e: emails)
386
        {
387
            if(Email.validEmail(e))
388
                recipients.add(e);
389
        }
390
        logger.info("subject: " + subject);
1260 jmachado 391
        if(fromEmail == null)
392
            logger.info("user: " + user.getEmail());
393
        else
394
            logger.info("user altered to: " + fromEmail);
1089 jmachado 395
        logger.info("template: " + template);
396
        logger.info("arguments:");
397
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
398
            logger.info(arg);
399
        logger.info("recipients:");
400
        for(1.5.0/docs/api/java/lang/String.html">String rec: recipients)
401
            logger.info(rec);
402
        logger.info("arguments end");
1260 jmachado 403
        fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
404
        Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
1089 jmachado 405
        email.setFromName(from + " (ESTG)");
406
        return email;
407
    }
408
 
1425 jmachado 409
    public Email getMessageEmailAdulteredFromEmailIpp(1.5.0/docs/api/java/lang/String.html">String fromEmail, 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, List<String> emails, User user)
410
    {
411
//        # 0 : From
412
//        # 1 : Subject
413
//        # 2 : Text
1429 jmachado 414
//        # 3 : FromEmail Adultered in message
415
//        # 4 : URL todo with certificate
1425 jmachado 416
        List<String> arguments = new ArrayList<String>();
417
        arguments.add(from);
418
        arguments.add(subject);
419
        arguments.add(text);
420
        arguments.add(fromEmail);
421
 
422
        1.5.0/docs/api/java/lang/String.html">String template;
423
 
424
        template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT;
425
 
426
 
427
        List<String> recipients = new ArrayList<String>();
428
        for(1.5.0/docs/api/java/lang/String.html">String e: emails)
429
        {
430
            if(Email.validEmail(e))
431
                recipients.add(e);
432
        }
1426 jmachado 433
 
1425 jmachado 434
        logger.info("subject: " + subject);
435
        if(fromEmail == null)
436
            logger.info("user: " + user.getEmail());
437
        else
438
            logger.info("user altered to: " + fromEmail);
439
        logger.info("template: " + template);
440
        logger.info("arguments:");
441
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
442
            logger.info(arg);
443
        logger.info("recipients:");
444
        for(1.5.0/docs/api/java/lang/String.html">String rec: recipients)
445
            logger.info(rec);
446
        logger.info("arguments end");
447
        fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
1429 jmachado 448
        Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.TO);
1425 jmachado 449
        email.setFromName(from + " (PAE-IPP)");
450
        return email;
451
    }
452
 
1429 jmachado 453
    public EmailPersonalizedCertificated getMessageEmailAdulteredFromEmailIppCertificated(
454
            1.5.0/docs/api/java/lang/String.html">String fromEmail, 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, User user,
455
            List<Long> userIds,
456
            1.5.0/docs/api/java/lang/String.html">String url
457
    )
458
    {
459
//        # 0 : From
460
//        # 1 : Subject
461
//        # 2 : Text
462
//        # 3 : FromEmail Adultered in message
463
//        # 4 : URL todo with certificate
464
        List<String> arguments = new ArrayList<String>();
465
        arguments.add(from);
466
        arguments.add(subject);
467
        arguments.add(text);
468
        arguments.add(fromEmail);
1426 jmachado 469
 
1429 jmachado 470
        1.5.0/docs/api/java/lang/String.html">String template;
1426 jmachado 471
 
1429 jmachado 472
        template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED;
473
 
474
 
475
        logger.info("Preparing batch work for Personalized Emails Certificated");
476
        logger.info("subject: " + subject);
477
        if(fromEmail == null)
478
            logger.info("user: " + user.getEmail());
479
        else
480
            logger.info("user altered to: " + fromEmail);
481
        logger.info("template: " + template);
482
        logger.info("arguments:");
483
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
484
            logger.info(arg);
485
        logger.info("userIds:" + userIds);
486
        logger.info("arguments end");
487
        fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
488
        EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject ,fromEmail,template,arguments,
489
                url,
490
                userIds);
491
        email.setFromName(from + " (PAE-IPP)");
492
 
493
        return email;
494
    }
495
 
496
 
497
 
1089 jmachado 498
    public Email getMessageEmailOld(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)
499
    {
500
//        # 0 : From
501
//        # 1 : Subject
502
//        # 2 : Text
503
//        # 3 : person
504
//        # 4 : target
505
        List<String> arguments = new ArrayList<String>();
506
        arguments.add(from);
507
        arguments.add(subject);
508
        arguments.add(text);
509
        arguments.add(user.getName());
510
        arguments.add(target);
511
 
512
        1.5.0/docs/api/java/lang/String.html">String template;
513
 
514
        if(langEnum == LangEnum.PORTUGUESE)
515
        {
516
            template = Globals.EMAIL_MESSAGE_TEMPLATE_PT;
517
        }
518
        else
519
        {
520
            template = Globals.EMAIL_MESSAGE_TEMPLATE_EN;
521
        }
522
 
523
        List<String> recipients = new ArrayList<String>();
512 jmachado 524
        for(User u: users)
525
        {
526
            if(Email.validEmail(u.getEmail()))
527
                recipients.add(u.getEmail());
528
            if(Email.validEmail(u.getOutEmail()))
529
                recipients.add(u.getOutEmail());
530
        }
810 jmachado 531
        logger.info("subject: " + subject);
532
        logger.info("user: " + user.getEmail());
533
        logger.info("template: " + template);
534
        logger.info("arguments:");
535
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
536
            logger.info(arg);
537
        logger.info("recipients:");
538
        for(1.5.0/docs/api/java/lang/String.html">String rec: recipients)
539
            logger.info(rec);
540
        logger.info("arguments end");
872 jmachado 541
        Email email = new Email(subject ,recipients,user.getEmail(),template,arguments,Message.RecipientType.BCC);
542
        email.setFromName(from + " (ESTG)");
543
        return email;
512 jmachado 544
    }
545
 
237 jmachado 546
    public Email getCourseUnitAnnouncementEmail(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
547
    {
548
        List<String> arguments = new ArrayList<String>();
549
        arguments.add(announcement.getCourseUnit().getName());
550
        arguments.add(announcement.getTitle());
551
        arguments.add(announcement.getText());
552
        arguments.add(from);
553
 
554
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
555
        1.5.0/docs/api/java/lang/String.html">String template;
556
 
557
        if(langEnum == LangEnum.PORTUGUESE)
558
        {
559
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT;
560
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_PT;
561
        }
562
        else
563
        {
564
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN;
565
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_EN;
566
        }
567
 
568
        List<String> recipients = new ArrayList<String>();
569
        for(User u: users)
570
        {
298 jmachado 571
            if(Email.validEmail(u.getEmail()))
572
                recipients.add(u.getEmail());
419 jmachado 573
            if(Email.validEmail(u.getOutEmail()))
574
                recipients.add(u.getOutEmail());
237 jmachado 575
        }
576
 
577
        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 578
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
579
        if(announcement.getOwner() != null && Email.validEmail(announcement.getOwner().getEmail()))
580
            fromEmail = announcement.getOwner().getEmail();
581
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
237 jmachado 582
    }
583
 
363 jmachado 584
    public Email getCourseUnitBlogPostEmail(BlogPost post, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
585
    {
586
        List<String> arguments = new ArrayList<String>();
587
        arguments.add(((CourseUnitBlog)post.getBlog()).getCourseUnit().getName());
588
        arguments.add(post.getTitle());
589
        arguments.add(post.getText());
590
        arguments.add(from);
237 jmachado 591
 
363 jmachado 592
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
593
        1.5.0/docs/api/java/lang/String.html">String template;
594
 
595
        if(langEnum == LangEnum.PORTUGUESE)
596
        {
597
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT;
598
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT;
599
        }
600
        else
601
        {
602
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN;
603
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN;
604
        }
605
 
606
        List<String> recipients = new ArrayList<String>();
607
        for(User u: users)
608
        {
609
            if(Email.validEmail(u.getEmail()))
610
                recipients.add(u.getEmail());
419 jmachado 611
            if(Email.validEmail(u.getOutEmail()))
612
                recipients.add(u.getOutEmail());
363 jmachado 613
        }
614
 
615
        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 616
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
617
        if(post.getOwner() != null && Email.validEmail(post.getOwner().getEmail()))
618
            fromEmail = post.getOwner().getEmail();
619
        return new Email(subject ,recipients, fromEmail, template,arguments,Message.RecipientType.BCC);
363 jmachado 620
    }
621
 
440 jmachado 622
    public Email getCourseUnitWorkEmail(CourseUnitAssignement assignement, LangEnum langEnum, UserSession userSession,  List<User> users, boolean newWork)
419 jmachado 623
    {
624
        List<String> arguments = new ArrayList<String>();
625
        arguments.add(assignement.getCourseUnit().getName());
626
        arguments.add(assignement.getTitle());
627
        arguments.add(assignement.getDescription());
440 jmachado 628
 
419 jmachado 629
        if(userSession != null && userSession.getName() != null)
630
            arguments.add(userSession.getName());
631
        else
632
            arguments.add("unknown");
363 jmachado 633
 
440 jmachado 634
        arguments.add( DatesUtils.getStringFromDate(assignement.getDeliverDate()));
492 jmachado 635
 
1353 jmachado 636
        //String directUrl = Globals.EMAIL_COURSEUNIT_WORK_RELATIVE_URL;
637
        //directUrl = Globals.SITE_URL +  MessageFormat.format(directUrl,assignement.getCourseUnit().getId());
638
 
419 jmachado 639
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
640
        1.5.0/docs/api/java/lang/String.html">String template;
641
 
642
        if(langEnum == LangEnum.PORTUGUESE)
643
        {
440 jmachado 644
            if(newWork)
645
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_PT;
646
            else
647
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_PT;
419 jmachado 648
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_PT;
649
        }
650
        else
651
        {
440 jmachado 652
            if(newWork)
653
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_EN;
654
            else
655
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_EN;
419 jmachado 656
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_EN;
657
        }
658
 
659
        List<String> recipients = new ArrayList<String>();
660
        for(User u: users)
661
        {
662
            if(Email.validEmail(u.getEmail()))
663
                recipients.add(u.getEmail());
664
            if(Email.validEmail(u.getOutEmail()))
665
                recipients.add(u.getOutEmail());
666
        }
667
 
668
        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()});
669
 
670
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
671
        if(userSession!= null && userSession.getUser() != null && Email.validEmail(userSession.getUser().getEmail()))
672
            fromEmail = userSession.getUser().getEmail();
673
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
674
    }
675
 
676
 
677
 
236 jmachado 678
    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)
679
    {
680
        List<String> arguments = new ArrayList<String>();
681
 
682
        1.5.0/docs/api/java/lang/String.html">String subject;
683
        1.5.0/docs/api/java/lang/String.html">String template;
684
 
685
        if(langEnum == LangEnum.PORTUGUESE)
686
        {
687
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_PT;
237 jmachado 688
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_PT;
236 jmachado 689
        }
690
        else
691
        {
692
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_EN;
237 jmachado 693
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_EN;
236 jmachado 694
        }
695
 
696
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder gradesBuilder = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
697
        for(1.5.0/docs/api/java/lang/String.html">String[] grade:  grades)
698
        {
699
            1.5.0/docs/api/java/lang/String.html">String gradeTxt = TemplateUtils.formatMessageTemplate(gradeUnitTemplate,grade);
700
            gradesBuilder.append(gradeTxt);
701
        }
702
 
703
        arguments.add(studentName);
704
        arguments.add(gradesBuilder.toString());
705
 
706
        List<String> recipients = new ArrayList<String>();
707
        recipients.add(studentEmail);
708
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
709
    }
710
 
358 jmachado 711
    public Email getSummaryEmail(List<String> emails, CourseUnitSummary cUS, CourseUnit c, LangEnum langEnum)
712
    {
713
        List<String> arguments = new ArrayList<String>();
714
 
715
        1.5.0/docs/api/java/lang/String.html">String data = DatesUtils.getStringFromDate(cUS.getDataAula());
716
        1.5.0/docs/api/java/lang/String.html">String subject;
717
        1.5.0/docs/api/java/lang/String.html">String template;
718
 
719
        if(langEnum == LangEnum.PORTUGUESE)
720
        {
721
            template = Globals.EMAIL_SUMMARY_TEMPLATE_PT;
722
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
723
        }
724
        else
725
        {
726
            template = Globals.EMAIL_SUMMARY_TEMPLATE_EN;
727
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
728
        }
729
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
730
 
731
        arguments.add(c.getName());
732
        arguments.add(""+cUS.getNumeroAula());
733
        arguments.add(data);
734
        arguments.add(cUS.getTitulo());
735
        arguments.add(cUS.getDescricao());
736
 
737
        List<String> recipients = new ArrayList<String>();
738
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
739
            recipients.add(email);
740
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
741
    }
742
 
995 jmachado 743
 
744
    //TODO TESTAR
745
    public Email getSummariesEmail(List<String> emails, List<CourseUnitSummary> cUS, CourseUnit c, LangEnum langEnum)
746
    {
747
 
748
 
749
        1.5.0/docs/api/java/lang/String.html">String ultimaData = DatesUtils.getStringFromDate(cUS.get(cUS.size() - 1).getDataAula());
750
        1.5.0/docs/api/java/lang/String.html">String subject;
751
        1.5.0/docs/api/java/lang/String.html">String template;
752
        1.5.0/docs/api/java/lang/String.html">String templateFragment;
753
 
754
        if(langEnum == LangEnum.PORTUGUESE)
755
        {
756
            template = Globals.EMAIL_SUMMARIES_TEMPLATE_PT;
757
            templateFragment = Globals.EMAIL_SUMMARIES_FRAGMENT_TEMPLATE_PT;
758
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
759
        }
760
        else
761
        {
762
            template = Globals.EMAIL_SUMMARIES_TEMPLATE_EN;
763
            templateFragment = Globals.EMAIL_SUMMARIES_FRAGMENT_TEMPLATE_EN;
764
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
765
        }
766
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
767
 
768
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder fragments = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
769
 
770
        List<String> arguments = new ArrayList<String>();
771
        1.5.0/docs/api/java/lang/String.html">String fragmentSummaryTemplate = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + templateFragment);
772
        for(CourseUnitSummary summary: cUS)
773
        {
774
            List<String> argumentsFrag = new ArrayList<String>();
775
            argumentsFrag.add(summary.getTitulo());
776
            argumentsFrag.add(DatesUtils.getStringFromDate(summary.getDataAula()));
777
            argumentsFrag.add(summary.getDescricao());
778
            1.5.0/docs/api/java/lang/String.html">String fullMessage = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(fragmentSummaryTemplate, argumentsFrag.toArray());
779
            fragments.append("\n").append(fullMessage);
780
        }
781
 
782
        arguments.add(c.getName());
783
        arguments.add(ultimaData);
784
        arguments.add(fragments.toString());
785
 
786
        List<String> recipients = new ArrayList<String>();
787
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
788
            recipients.add(email);
789
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
790
    }
791
 
751 jmachado 792
    public Email getUnidadeEdicaoEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
793
    {
794
        List<String> arguments = new ArrayList<String>();
795
 
796
 
797
        1.5.0/docs/api/java/lang/String.html">String subject;
798
        1.5.0/docs/api/java/lang/String.html">String template;
799
 
800
        if(langEnum == LangEnum.PORTUGUESE)
801
        {
802
            template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_PT;
803
            subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_PT;
804
        }
805
        else
806
        {
807
            template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_EN;
808
            subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_EN;
809
        }
810
        subject = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(ConfigProperties.getProperty(subject),new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
811
 
812
        arguments.add(c.getName());
813
 
814
        List<String> recipients = new ArrayList<String>();
815
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
816
            recipients.add(email);
817
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
818
    }
819
 
820
     public Email getUnidadeValidadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
821
    {
822
        List<String> arguments = new ArrayList<String>();
823
 
824
 
825
        1.5.0/docs/api/java/lang/String.html">String subject;
826
        1.5.0/docs/api/java/lang/String.html">String template;
827
 
828
        if(langEnum == LangEnum.PORTUGUESE)
829
        {
830
            template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_PT;
831
            subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_PT;
832
        }
833
        else
834
        {
835
            template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_EN;
836
            subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_EN;
837
        }
838
        subject = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(ConfigProperties.getProperty(subject),new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
839
 
840
        arguments.add(c.getName());
841
 
842
        List<String> recipients = new ArrayList<String>();
843
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
844
            recipients.add(email);
845
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
846
    }
847
 
848
    public Email getUnidadeEditadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
849
    {
850
        List<String> arguments = new ArrayList<String>();
851
 
852
 
853
        1.5.0/docs/api/java/lang/String.html">String subject;
854
        1.5.0/docs/api/java/lang/String.html">String template;
855
 
856
        if(langEnum == LangEnum.PORTUGUESE)
857
        {
858
            template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_PT;
859
            subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_PT;
860
        }
861
        else
862
        {
863
            template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_EN;
864
            subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_EN;
865
        }
866
        subject = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(ConfigProperties.getProperty(subject),new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
867
 
868
        arguments.add(c.getCourseName());
869
        arguments.add(c.getName());
870
 
871
        List<String> recipients = new ArrayList<String>();
872
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
873
            recipients.add(email);
874
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
875
    }
876
 
1033 jmachado 877
    public Email getRelatorioAvaliacaoUnidadeEditadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum,1.5.0/docs/api/java/lang/String.html">String estado)
878
    {
879
        List<String> arguments = new ArrayList<String>();
880
 
881
 
882
        1.5.0/docs/api/java/lang/String.html">String subject;
883
        1.5.0/docs/api/java/lang/String.html">String template;
884
 
885
        if(langEnum == LangEnum.PORTUGUESE)
886
        {
887
            template = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_TEMPLATE_PT;
888
            subject = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_SUBJECT_PT;
889
        }
890
        else
891
        {
892
            template = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_TEMPLATE_EN;
893
            subject = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_SUBJECT_EN;
894
        }
895
        subject = 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(ConfigProperties.getProperty(subject),new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});
896
 
897
        arguments.add(c.getCourseName());
898
        arguments.add(c.getName());
899
        arguments.add(estado);
900
 
901
        List<String> recipients = new ArrayList<String>();
902
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
903
            recipients.add(email);
904
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
905
    }
906
 
236 jmachado 907
    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)
908
    {
909
        try
910
        {
911
            sendEmail(getNewGradesEmail(grades,langEnum,studentEmail,studentName));
912
            return true;
913
        }
914
        catch (ServiceException e)
915
        {
916
            return false;
917
        }
918
 
919
    }
920
 
921
    public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
922
    {
440 jmachado 923
        1.5.0/docs/api/java/lang/System.html">System.out.println( DatesUtils.getStringFromDate(new 5+0%2Fdocs%2Fapi+Date">Date()));
924
//        List<String[]> grades = new ArrayList<String[]>();
925
//        grades.add(new String[]{"Teste","3"});
926
//        grades.add(new String[]{"Teste2","4"});
927
//        new SendEmailService().sendNewGrades(grades,LangEnum.PORTUGUESE,"jmachado@estgp.pt","jorge Machado");
236 jmachado 928
    }
929
 
29 jmachado 930
}