Subversion Repositories bacoAlunos

Rev

Rev 1269 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.email;

import jomm.utils.TemplateUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * @author Jorge Machado
 * @date 20/Mar/2008
 * @time 18:31:00
 * @see pt.estgp.estgweb.services.email
 */

public class SendEmailService implements IService
{
    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);

    private static final 1.5.0/docs/api/java/lang/String.html">String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE;

    static 1.5.0/docs/api/java/lang/String.html">String[] serverEmails;
    static int serverEmailPos = -1;

    static{
        serverEmails = new 1.5.0/docs/api/java/lang/String.html">String[Globals.EMAIL_SERVER_USER_COUNT];
        for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++)
        {
            serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX;
        }
    }
    private static synchronized 1.5.0/docs/api/java/lang/String.html">String getRoundRobinEmailUser()
    {
        serverEmailPos++;
        if(serverEmailPos >= Globals.EMAIL_SERVER_USER_COUNT)
        {
            serverEmailPos = 0;
        }
        return serverEmails[serverEmailPos];
    }
    public void sendEmail(Email email) throws ServiceException
    {
        try{
            final 1.5.0/docs/api/java/lang/String.html">String sendFromAddress = getRoundRobinEmailUser();

            // Set up properties for mail session
            1.5.0/docs/api/java/util/Properties.html">Properties props = 1.5.0/docs/api/java/lang/System.html">System.getProperties();
            props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
            final 1.5.0/docs/api/java/lang/String.html">String username = Globals.EMAIL_SERVER_USERNAME;
            final 1.5.0/docs/api/java/lang/String.html">String password = Globals.EMAIL_SERVER_PASSWORD;
            javax.mail.1.5.0/docs/api/java/net/Authenticator.html">Authenticator authenticator = null;
            if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0)
            {
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.starttls.enable", "true");
                props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS);
                authenticator = new javax.mail.1.5.0/docs/api/java/net/Authenticator.html">Authenticator() {
                    protected 1.5.0/docs/api/java/net/PasswordAuthentication.html">PasswordAuthentication getPasswordAuthentication() {
                        return new 1.5.0/docs/api/java/net/PasswordAuthentication.html">PasswordAuthentication(sendFromAddress, password);
                    }
                };
            }
            else if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0)
            {
                props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL);
                props.put("mail.smtp.socketFactory.class",
                        "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL);
                authenticator = new javax.mail.1.5.0/docs/api/java/net/Authenticator.html">Authenticator() {
                    protected 1.5.0/docs/api/java/net/PasswordAuthentication.html">PasswordAuthentication getPasswordAuthentication() {
                        return new 1.5.0/docs/api/java/net/PasswordAuthentication.html">PasswordAuthentication(sendFromAddress,password);
                    }
                };
            }
            else
            {

            }






            // Get session
            Session session = Session.getDefaultInstance(props, authenticator);
            session.setDebug(true);
            session.setDebugOut(1.5.0/docs/api/java/lang/System.html">System.out);

            // Create message
            MimeMessage message = new MimeMessage(session);
            // Set the recipients of the message
            boolean valid = false;
            for (1.5.0/docs/api/java/lang/String.html">String recipient : email.getRecipients())
            {
                if(Email.validEmail(recipient))
                {
                    valid=true;
                    message.addRecipient(email.getType(),new InternetAddress(recipient));
                    logger.info("Adding recipient to transport:"+recipient);
                }
            }
            if(valid)
            {

                1.5.0/docs/api/java/lang/String.html">String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName());
                // Format the mail message
                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());



                logger.info("FROM:" + email.getFrom() + " but using: " + sendFromAddress);
                //if(email.getFromName() != null)
                    try {
                        message.setFrom(new InternetAddress(sendFromAddress,sendFromAddress));
                    } catch (1.5.0/docs/api/java/io/UnsupportedEncodingException.html">UnsupportedEncodingException e) {
                        logger.error(e,e);
                        //message.setFrom(new InternetAddress(sendFromAddress));
                    }
                //else
                //    message.setFrom(new InternetAddress(Globals.SYSTEM_EMAIL_BOX));
                message.setSubject(email.getSubject() + " - não responda para este endereço","utf-8");

                if(email.isHtml())
                {

                    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";
                    fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api através de baco 2015 </h5>";

                }
                else
                {
                    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";
                    fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api através de baco 2015";
                }

                message.setText(fullMessage,"utf-8");


                if(email.isHtml())
                {
                    message.setHeader("Content-Type","text/html; charset=\"utf-8\"");
                }
                else
                {
                    message.setHeader("Content-Type","text/plain; charset=\"utf-8\"");
                }
                message.setHeader("Content-Transfer-Encoding", "quoted-printable");
                logger.info("Sending email to transport:"+fullMessage);



                Transport.send(message);
            }
        }
        catch(MessagingException e)
        {
            logger.error(e,e);
            throw new ServiceException(e.toString());
        }
    }

    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)
    {
        List<String> arguments = new ArrayList<String>();
        arguments.add(from);
        arguments.add(url);
        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_PT;
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_SEND_URL_FRIEND_TEMPLATE_EN;
            subjectTxt = Globals.EMAIL_SEND_URL_FRIEND_SUBJECT_EN;
        }

        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});
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    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)
    {
        try
        {
            sendEmail(getSendUrlToFriendEmail(url,from,langEnum,recipients));
            return true;
        }
        catch (ServiceException e)
        {
            return false;
        }
    }

    public boolean sendCourseUnitAnnouncement(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
    {
        try
        {
            sendEmail(getCourseUnitAnnouncementEmail(announcement,langEnum,from,users));
            return true;
        }
        catch (ServiceException e)
        {
            return false;
        }
    }

    public static class SendTo
    {
        public 1.5.0/docs/api/java/lang/String.html">String name;
        public 1.5.0/docs/api/java/lang/String.html">String email;
        public 1.5.0/docs/api/java/lang/String.html">String outEmail;
    }

    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)
    {
        return getMessageEmailAdulteredFromEmail(null,from,subject,text,langEnum,target,emails,user);
    }

    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)
    {
//        # 0 : From
//        # 1 : Subject
//        # 2 : Text
//        # 3 : person
//        # 4 : target
        List<String> arguments = new ArrayList<String>();
        arguments.add(from);
        arguments.add(subject);
        arguments.add(text);
        arguments.add(user.getName());
        arguments.add(target);
        arguments.add(fromEmail);

        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_MESSAGE_TEMPLATE_PT;
        }
        else
        {
            template = Globals.EMAIL_MESSAGE_TEMPLATE_EN;
        }

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String e: emails)
        {
            if(Email.validEmail(e))
                recipients.add(e);
        }
        logger.info("subject: " + subject);
        if(fromEmail == null)
            logger.info("user: " + user.getEmail());
        else
            logger.info("user altered to: " + fromEmail);
        logger.info("template: " + template);
        logger.info("arguments:");
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
            logger.info(arg);
        logger.info("recipients:");
        for(1.5.0/docs/api/java/lang/String.html">String rec: recipients)
            logger.info(rec);
        logger.info("arguments end");
        fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
        Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
        email.setFromName(from + " (ESTG)");
        return email;
    }

    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)
    {
//        # 0 : From
//        # 1 : Subject
//        # 2 : Text
//        # 3 : person
//        # 4 : target
        List<String> arguments = new ArrayList<String>();
        arguments.add(from);
        arguments.add(subject);
        arguments.add(text);
        arguments.add(user.getName());
        arguments.add(target);

        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_MESSAGE_TEMPLATE_PT;
        }
        else
        {
            template = Globals.EMAIL_MESSAGE_TEMPLATE_EN;
        }

        List<String> recipients = new ArrayList<String>();
        for(User u: users)
        {
            if(Email.validEmail(u.getEmail()))
                recipients.add(u.getEmail());
            if(Email.validEmail(u.getOutEmail()))
                recipients.add(u.getOutEmail());
        }
        logger.info("subject: " + subject);
        logger.info("user: " + user.getEmail());
        logger.info("template: " + template);
        logger.info("arguments:");
        for(1.5.0/docs/api/java/lang/String.html">String arg: arguments)
            logger.info(arg);
        logger.info("recipients:");
        for(1.5.0/docs/api/java/lang/String.html">String rec: recipients)
            logger.info(rec);
        logger.info("arguments end");
        Email email = new Email(subject ,recipients,user.getEmail(),template,arguments,Message.RecipientType.BCC);
        email.setFromName(from + " (ESTG)");
        return email;
    }

    public Email getCourseUnitAnnouncementEmail(CourseUnitAnnouncement announcement, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
    {
        List<String> arguments = new ArrayList<String>();
        arguments.add(announcement.getCourseUnit().getName());
        arguments.add(announcement.getTitle());
        arguments.add(announcement.getText());
        arguments.add(from);

        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT;
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN;
            subjectTxt = Globals.EMAIL_COURSEUNIT_ANNOUNCEMENT_SUBJECT_EN;
        }

        List<String> recipients = new ArrayList<String>();
        for(User u: users)
        {
            if(Email.validEmail(u.getEmail()))
                recipients.add(u.getEmail());
            if(Email.validEmail(u.getOutEmail()))
                recipients.add(u.getOutEmail());
        }

        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()});
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
        if(announcement.getOwner() != null && Email.validEmail(announcement.getOwner().getEmail()))
            fromEmail = announcement.getOwner().getEmail();
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
    }

    public Email getCourseUnitBlogPostEmail(BlogPost post, LangEnum langEnum, 1.5.0/docs/api/java/lang/String.html">String from,  List<User> users)
    {
        List<String> arguments = new ArrayList<String>();
        arguments.add(((CourseUnitBlog)post.getBlog()).getCourseUnit().getName());
        arguments.add(post.getTitle());
        arguments.add(post.getText());
        arguments.add(from);

        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT;
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN;
            subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN;
        }

        List<String> recipients = new ArrayList<String>();
        for(User u: users)
        {
            if(Email.validEmail(u.getEmail()))
                recipients.add(u.getEmail());
            if(Email.validEmail(u.getOutEmail()))
                recipients.add(u.getOutEmail());
        }

        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()});
        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
        if(post.getOwner() != null && Email.validEmail(post.getOwner().getEmail()))
            fromEmail = post.getOwner().getEmail();
        return new Email(subject ,recipients, fromEmail, template,arguments,Message.RecipientType.BCC);
    }

    public Email getCourseUnitWorkEmail(CourseUnitAssignement assignement, LangEnum langEnum, UserSession userSession,  List<User> users, boolean newWork)
    {
        List<String> arguments = new ArrayList<String>();
        arguments.add(assignement.getCourseUnit().getName());
        arguments.add(assignement.getTitle());
        arguments.add(assignement.getDescription());

        if(userSession != null && userSession.getName() != null)
            arguments.add(userSession.getName());
        else
            arguments.add("unknown");

        arguments.add( DatesUtils.getStringFromDate(assignement.getDeliverDate()));

        1.5.0/docs/api/java/lang/String.html">String subjectTxt;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            if(newWork)
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_PT;
            else
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_PT;
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_PT;
        }
        else
        {
            if(newWork)
                template = Globals.EMAIL_COURSEUNIT_WORK_TEMPLATE_EN;
            else
                template = Globals.EMAIL_COURSEUNIT_WORK_CHANGE_TEMPLATE_EN;
            subjectTxt = Globals.EMAIL_COURSEUNIT_WORK_SUBJECT_EN;
        }

        List<String> recipients = new ArrayList<String>();
        for(User u: users)
        {
            if(Email.validEmail(u.getEmail()))
                recipients.add(u.getEmail());
            if(Email.validEmail(u.getOutEmail()))
                recipients.add(u.getOutEmail());
        }

        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()});

        1.5.0/docs/api/java/lang/String.html">String fromEmail = Globals.SYSTEM_EMAIL_BOX;
        if(userSession!= null && userSession.getUser() != null && Email.validEmail(userSession.getUser().getEmail()))
            fromEmail = userSession.getUser().getEmail();
        return new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC);
    }



    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)
    {
        List<String> arguments = new ArrayList<String>();

        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_PT;
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_NEW_GRADES_TEMPLATE_EN;
            subject = Globals.EMAIL_NEW_GRADES_SUBJECT_EN;
        }

        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder gradesBuilder = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
        for(1.5.0/docs/api/java/lang/String.html">String[] grade:  grades)
        {
            1.5.0/docs/api/java/lang/String.html">String gradeTxt = TemplateUtils.formatMessageTemplate(gradeUnitTemplate,grade);
            gradesBuilder.append(gradeTxt);
        }

        arguments.add(studentName);
        arguments.add(gradesBuilder.toString());

        List<String> recipients = new ArrayList<String>();
        recipients.add(studentEmail);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    public Email getSummaryEmail(List<String> emails, CourseUnitSummary cUS, CourseUnit c, LangEnum langEnum)
    {
        List<String> arguments = new ArrayList<String>();

        1.5.0/docs/api/java/lang/String.html">String data = DatesUtils.getStringFromDate(cUS.getDataAula());
        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_SUMMARY_TEMPLATE_PT;
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_SUMMARY_TEMPLATE_EN;
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
        }
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});

        arguments.add(c.getName());
        arguments.add(""+cUS.getNumeroAula());
        arguments.add(data);
        arguments.add(cUS.getTitulo());
        arguments.add(cUS.getDescricao());

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }


    //TODO TESTAR
    public Email getSummariesEmail(List<String> emails, List<CourseUnitSummary> cUS, CourseUnit c, LangEnum langEnum)
    {


        1.5.0/docs/api/java/lang/String.html">String ultimaData = DatesUtils.getStringFromDate(cUS.get(cUS.size() - 1).getDataAula());
        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;
        1.5.0/docs/api/java/lang/String.html">String templateFragment;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_SUMMARIES_TEMPLATE_PT;
            templateFragment = Globals.EMAIL_SUMMARIES_FRAGMENT_TEMPLATE_PT;
            subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_SUMMARIES_TEMPLATE_EN;
            templateFragment = Globals.EMAIL_SUMMARIES_FRAGMENT_TEMPLATE_EN;
            subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
        }
        subject = TemplateUtils.formatMessageTemplate(subject,new 1.5.0/docs/api/java/lang/String.html">String[]{c.getName()});

        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder fragments = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();

        List<String> arguments = new ArrayList<String>();
        1.5.0/docs/api/java/lang/String.html">String fragmentSummaryTemplate = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + templateFragment);
        for(CourseUnitSummary summary: cUS)
        {
            List<String> argumentsFrag = new ArrayList<String>();
            argumentsFrag.add(summary.getTitulo());
            argumentsFrag.add(DatesUtils.getStringFromDate(summary.getDataAula()));
            argumentsFrag.add(summary.getDescricao());
            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());
            fragments.append("\n").append(fullMessage);
        }

        arguments.add(c.getName());
        arguments.add(ultimaData);
        arguments.add(fragments.toString());

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    public Email getUnidadeEdicaoEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
    {
        List<String> arguments = new ArrayList<String>();


        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_PT;
            subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_EN;
            subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_EN;
        }
        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()});

        arguments.add(c.getName());

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

     public Email getUnidadeValidadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
    {
        List<String> arguments = new ArrayList<String>();


        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_PT;
            subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_EN;
            subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_EN;
        }
        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()});

        arguments.add(c.getName());

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    public Email getUnidadeEditadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
    {
        List<String> arguments = new ArrayList<String>();


        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_PT;
            subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_EN;
            subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_EN;
        }
        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()});

        arguments.add(c.getCourseName());
        arguments.add(c.getName());

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    public Email getRelatorioAvaliacaoUnidadeEditadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum,1.5.0/docs/api/java/lang/String.html">String estado)
    {
        List<String> arguments = new ArrayList<String>();


        1.5.0/docs/api/java/lang/String.html">String subject;
        1.5.0/docs/api/java/lang/String.html">String template;

        if(langEnum == LangEnum.PORTUGUESE)
        {
            template = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_TEMPLATE_PT;
            subject = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_SUBJECT_PT;
        }
        else
        {
            template = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_TEMPLATE_EN;
            subject = Globals.EMAIL_RELATORIO_AVALIACAO_UNDADE_EDITADA_SUBJECT_EN;
        }
        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()});

        arguments.add(c.getCourseName());
        arguments.add(c.getName());
        arguments.add(estado);

        List<String> recipients = new ArrayList<String>();
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
            recipients.add(email);
        return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
    }

    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)
    {
        try
        {
            sendEmail(getNewGradesEmail(grades,langEnum,studentEmail,studentName));
            return true;
        }
        catch (ServiceException e)
        {
            return false;
        }

    }

    public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
    {
        1.5.0/docs/api/java/lang/System.html">System.out.println( DatesUtils.getStringFromDate(new 5+0%2Fdocs%2Fapi+Date">Date()));
//        List<String[]> grades = new ArrayList<String[]>();
//        grades.add(new String[]{"Teste","3"});
//        grades.add(new String[]{"Teste2","4"});
//        new SendEmailService().sendNewGrades(grades,LangEnum.PORTUGUESE,"jmachado@estgp.pt","jorge Machado");
    }

}