package org.jblooming.messaging; import org.jblooming.oql.OqlQuery; import org.jblooming.persistence.hibernate.PersistenceContext; import org.jblooming.scheduler.ExecutableSupport; import org.jblooming.scheduler.JobLogData; import org.jblooming.system.SystemConstants; import org.jblooming.tracer.Tracer; import org.jblooming.utilities.DateUtilities; import org.jblooming.utilities.JSP; import org.jblooming.waf.settings.ApplicationState; import org.jblooming.operator.Operator; import java.util.Date; import java.util.List; public class EmailMessageDispatcher extends ExecutableSupport { public JobLogData run(JobLogData jobLogData) throws Exception { PersistenceContext pc = null; try { pc = PersistenceContext.getDefaultPersistenceContext(); String hql = "from " + Message.class.getName() + " as mess where mess.media = :media and (mess.lastTry is null or mess.lastTry < :nowMinusDelay)"; OqlQuery query = new OqlQuery(hql); query.getQuery().setString("media", MessagingSystem.Media.EMAIL.toString()); Date nmd = new Date(System.currentTimeMillis() - MessagingSystem.DELAY_BETWEEN_ATTEMPTS); query.getQuery().setTimestamp("nowMinusDelay", nmd); List<Message> messages = query.list(); for (Message message : messages) { if (message.getNumberOfTries() > MessagingSystem.NUMBER_OF_ATTEMPTS) { message.remove(); String err = "EmailMessageDispatcher: could not send mail message with parameters: to operator of id " + message.getToOperator(); Tracer.platformLogger.error(err); Tracer.emailLogger.error(err); } else try { String fromEmail = null; Operator operator = message.getFromOperator(); if (operator != null) { fromEmail = operator.getDefaultEmail(); String displayName = operator.getDisplayName(); if (JSP.ex(fromEmail, displayName) && fromEmail.indexOf("<") == -1 && fromEmail.indexOf(",") == -1) { fromEmail = displayName + " <" + fromEmail + ">;"; } } if (!JSP.ex(fromEmail)) { fromEmail = ApplicationState.getApplicationSetting(SystemConstants.FLD_MAIL_FROM); String an = ApplicationState.platformConfiguration.getDefaultApplication().getName(); String anForced = ApplicationState.getApplicationSetting("MAIL_FROM_NAME"); if (JSP.ex(anForced)) an = anForced; if (JSP.ex(fromEmail, an) && fromEmail.indexOf("<") == -1 && fromEmail.indexOf(",") == -1) { fromEmail = an + " <" + fromEmail + ">;"; } } if (fromEmail == null) fromEmail = ""; if (message.getToOperator() != null) { Operator toOp = message.getToOperator(); String toEmail = toOp.getDefaultEmail(); if (toEmail != null) { String body = message.getMessageBody(); if (message.getLink() != null) body = body + "<hr>" + message.getLink(); // silvia added prefix to email from Teamwork String subjectPrefix = ApplicationState.getApplicationSetting(SystemConstants.FLD_MAIL_SUBJECT); MailHelper.sendHtmlMail(fromEmail, toEmail, JSP.w(subjectPrefix) + (JSP.ex(subjectPrefix) ? " " : "") + message.getSubject(), body); } } message.remove(); } catch (Throwable e) { Tracer.platformLogger.error("Problem sending e-mail", e); Tracer.emailLogger.error("Problem sending e-mail", e); message.setNumberOfTries(message.getNumberOfTries() + 1); message.setLastTry(new Date()); message.store(); } message.remove(); } pc.commitAndClose(); jobLogData.notes = jobLogData.notes + "EmailMessageDispatcher executed on " + DateUtilities.dateAndHourToString(new Date()); } catch (Throwable e) { Tracer.platformLogger.error("EmailMessageDispatcher error", e); Tracer.emailLogger.error("EmailMessageDispatcher error", e); jobLogData.successfull = false; if (pc != null) pc.rollbackAndClose(); } return jobLogData; } }