From 29d894b269136ebd7c22097ff866ac2a52cd9476 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 23 Apr 2008 03:12:40 +0000 Subject: [PATCH] [ 1949329 ] Workflow sendMail doesn't handle html flag in mail template --- base/src/org/compiere/model/MClient.java | 165 ++++++++++++++++++---- base/src/org/compiere/util/EMail.java | 42 +++++- base/src/org/compiere/wf/MWFActivity.java | 21 +-- 3 files changed, 187 insertions(+), 41 deletions(-) diff --git a/base/src/org/compiere/model/MClient.java b/base/src/org/compiere/model/MClient.java index c685c8d57f..d8daca3840 100644 --- a/base/src/org/compiere/model/MClient.java +++ b/base/src/org/compiere/model/MClient.java @@ -17,16 +17,28 @@ *****************************************************************************/ package org.compiere.model; -import java.rmi.*; -import java.sql.*; -import java.util.*; -import java.util.logging.*; -import javax.mail.internet.*; -import java.io.*; +import java.io.File; +import java.rmi.RemoteException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Locale; +import java.util.Properties; +import java.util.logging.Level; + +import javax.mail.internet.InternetAddress; -import org.compiere.db.*; -import org.compiere.interfaces.*; -import org.compiere.util.*; +import org.compiere.db.CConnection; +import org.compiere.interfaces.Server; +import org.compiere.util.CCache; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.EMail; +import org.compiere.util.Env; +import org.compiere.util.Ini; +import org.compiere.util.Language; /** * Client Model @@ -531,6 +543,21 @@ public class MClient extends X_AD_Client */ public boolean sendEMailAttachments (int AD_User_ID, String subject, String message, Collection attachments) + { + return sendEMailAttachments(AD_User_ID, subject, message, attachments, false); + } + + /** + * Send EMail from Request User - with trace + * @param AD_User_ID recipient + * @param subject subject + * @param message message + * @param attachment optional collection of attachments + * @param html + * @return true if sent + */ + public boolean sendEMailAttachments (int AD_User_ID, + String subject, String message, Collection attachments, boolean html) { MUser to = MUser.get(getCtx(), AD_User_ID); String toEMail = to.getEMail(); @@ -539,7 +566,7 @@ public class MClient extends X_AD_Client log.warning("No EMail for recipient: " + to); return false; } - EMail email = createEMail(null, to, subject, message); + EMail email = createEMail(null, to, subject, message, html); if (email == null) return false; email.addAttachments(attachments); @@ -553,19 +580,34 @@ public class MClient extends X_AD_Client return false; } } // sendEMail + + /** + * Send EMail from Request User - no trace + * @param to recipient email address + * @param subject subject + * @param message message + * @param attachment optional attachment + * @return true if sent + */ + public boolean sendEMail (String to, + String subject, String message, File attachment) + { + return sendEMail(to, subject, message, attachment, false); + } /** * Send EMail from Request User - no trace * @param to recipient email address * @param subject subject * @param message message - * @param attachment optional attachment + * @param attachment optional attachment + * @param html * @return true if sent */ public boolean sendEMail (String to, - String subject, String message, File attachment) + String subject, String message, File attachment, boolean html) { - EMail email = createEMail(to, subject, message); + EMail email = createEMail(to, subject, message, html); if (email == null) return false; if (attachment != null) @@ -593,6 +635,20 @@ public class MClient extends X_AD_Client } } // sendEMail + /** + * Send EMail from User + * @param from sender + * @param to recipient + * @param subject subject + * @param message message + * @param attachment optional attachment + * @return true if sent + */ + public boolean sendEMail (MUser from, MUser to, + String subject, String message, File attachment) + { + return sendEMail(from, to, subject, message, attachment, false); + } /** * Send EMail from User @@ -601,14 +657,17 @@ public class MClient extends X_AD_Client * @param subject subject * @param message message * @param attachment optional attachment + * @param isHtml * @return true if sent */ public boolean sendEMail (MUser from, MUser to, - String subject, String message, File attachment) + String subject, String message, File attachment, boolean isHtml) { - EMail email = createEMail(from, to, subject, message); - if (email == null) - return false; + EMail email = createEMail(from, to, subject, message, isHtml); + + if (email == null) + return false; + if (attachment != null) email.addAttachment(attachment); InternetAddress emailFrom = email.getFrom(); @@ -675,16 +734,30 @@ public class MClient extends X_AD_Client return false; } } // sendEmailNow + + /************ + * Create EMail from Request User + * @param to recipient + * @param subject sunject + * @param message nessage + * @return EMail + */ + public EMail createEMail (String to, + String subject, String message) + { + return createEMail(to, subject, message, false); + } /************ * Create EMail from Request User * @param to recipient * @param subject sunject - * @param message nessage + * @param message nessage + * @param html * @return EMail */ public EMail createEMail (String to, - String subject, String message) + String subject, String message, boolean html) { if (to == null || to.length() == 0) { @@ -699,7 +772,9 @@ public class MClient extends X_AD_Client try { if (server != null) - { // See ServerBean + { // See ServerBean + if (html && message != null) + message = EMail.HTML_MAIL_MARKER + message; email = server.createEMail(getCtx(), getAD_Client_ID(), to, subject, message); } @@ -714,22 +789,37 @@ public class MClient extends X_AD_Client if (email == null) email = new EMail (this, getRequestEMail(), to, - subject, message); + subject, message, html); if (isSmtpAuthorization()) email.createAuthenticator (getRequestUser(), getRequestUserPW()); return email; } // createEMail - + + /** + * Create EMail from User + * @param from optional sender + * @param to recipient + * @param subject sunject + * @param message nessage + * @return EMail + */ + public EMail createEMail (MUser from, MUser to, + String subject, String message) + { + return createEMail(from, to, subject, message, false); + } + /** * Create EMail from User * @param from optional sender * @param to recipient * @param subject sunject - * @param message nessage + * @param message nessage + * @param html * @return EMail */ public EMail createEMail (MUser from, MUser to, - String subject, String message) + String subject, String message, boolean html) { if (to == null) { @@ -741,19 +831,34 @@ public class MClient extends X_AD_Client log.warning("No To address: " + to); return null; } - return createEMail (from, to.getEMail(), subject, message); + return createEMail (from, to.getEMail(), subject, message, html); } // createEMail + + /** + * Create EMail from User + * @param from optional sender + * @param to recipient + * @param subject sunject + * @param message nessage + * @return EMail + */ + public EMail createEMail (MUser from, String to, + String subject, String message) + { + return createEMail(from, to, subject, message, false); + } /** * Create EMail from User * @param from optional sender * @param to recipient * @param subject sunject - * @param message nessage + * @param message nessage + * @param html * @return EMail */ public EMail createEMail (MUser from, String to, - String subject, String message) + String subject, String message, boolean html) { if (to == null || to.length() == 0) { @@ -779,7 +884,9 @@ public class MClient extends X_AD_Client try { if (server != null) - { // See ServerBean + { // See ServerBean + if (html && message != null) + message = email.HTML_MAIL_MARKER + message; email = server.createEMail(getCtx(), getAD_Client_ID(), from.getAD_User_ID(), to, subject, message); @@ -797,7 +904,7 @@ public class MClient extends X_AD_Client from.getEMail(), to, subject, - message); + message, html); if (isSmtpAuthorization()) email.createAuthenticator (from.getEMailUser(), from.getEMailUserPW()); return email; diff --git a/base/src/org/compiere/util/EMail.java b/base/src/org/compiere/util/EMail.java index 4513749fad..d2abb00576 100644 --- a/base/src/org/compiere/util/EMail.java +++ b/base/src/org/compiere/util/EMail.java @@ -45,6 +45,8 @@ import org.compiere.model.*; */ public final class EMail implements Serializable { + //use in serverbean + public final static String HTML_MAIL_MARKER = "ContentType=text/html;"; /** * Full Constructor * @param client the client @@ -58,6 +60,21 @@ public final class EMail implements Serializable { this (client.getCtx(), client.getSMTPHost(), from, to, subject, message); } // EMail + + /** + * Full Constructor + * @param client the client + * @param from Sender's EMail address + * @param to Recipient EMail address + * @param subject Subject of message + * @param message The message + * @param html + */ + public EMail (MClient client, String from, String to, + String subject, String message, boolean html) + { + this (client.getCtx(), client.getSMTPHost(), from, to, subject, message, html); + } // EMail /** * Full Constructor @@ -69,7 +86,23 @@ public final class EMail implements Serializable * @param message The message */ public EMail (Properties ctx, String smtpHost, String from, String to, - String subject, String message) + String subject, String message) + { + this(ctx, smtpHost, from, to, subject, message, false); + } + + /** + * Full Constructor + * @param ctx context + * @param smtpHost The mail server + * @param from Sender's EMail address + * @param to Recipient EMail address + * @param subject Subject of message + * @param message The message + * @param html html email + */ + public EMail (Properties ctx, String smtpHost, String from, String to, + String subject, String message, boolean html) { setSmtpHost(smtpHost); setFrom(from); @@ -80,7 +113,12 @@ public final class EMail implements Serializable else setSubject (subject); if (message != null && message.length() > 0) - setMessageText (message); + { + if (html) + setMessageHTML(subject, message); + else + setMessageText (message); + } m_valid = isValid (true); } // EMail diff --git a/base/src/org/compiere/wf/MWFActivity.java b/base/src/org/compiere/wf/MWFActivity.java index ffdc1ff53f..ba46ae5998 100644 --- a/base/src/org/compiere/wf/MWFActivity.java +++ b/base/src/org/compiere/wf/MWFActivity.java @@ -1530,12 +1530,12 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable MClient client = MClient.get(doc.getCtx(), doc.getAD_Client_ID()); // Explicit EMail - sendEMail(client, 0, m_node.getEMail(), subject, message, pdf); + sendEMail(client, 0, m_node.getEMail(), subject, message, pdf, text.isHtml()); // Recipient Type String recipient = m_node.getEMailRecipient(); // email to document user if (recipient == null || recipient.length() == 0) - sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf); + sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf, text.isHtml()); else if (recipient.equals(MWFNode.EMAILRECIPIENT_DocumentBusinessPartner)) { int index = m_po.get_ColumnIndex("AD_User_ID"); @@ -1546,7 +1546,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable { int AD_User_ID = ((Integer)oo).intValue(); if (AD_User_ID != 0) - sendEMail(client, AD_User_ID, null, subject, message, pdf); + sendEMail(client, AD_User_ID, null, subject, message, pdf, text.isHtml()); else log.fine("No User in Document"); } @@ -1557,14 +1557,14 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable log.fine("No User Field in Document"); } else if (recipient.equals(MWFNode.EMAILRECIPIENT_DocumentOwner)) - sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf); + sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf, text.isHtml()); else if (recipient.equals(MWFNode.EMAILRECIPIENT_WFResponsible)) { MWFResponsible resp = getResponsible(); if (resp.isInvoker()) - sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf); + sendEMail(client, doc.getDoc_User_ID(), null, subject, message, pdf, text.isHtml()); else if (resp.isHuman()) - sendEMail(client, resp.getAD_User_ID(), null, subject, message, pdf); + sendEMail(client, resp.getAD_User_ID(), null, subject, message, pdf, text.isHtml()); else if (resp.isRole()) { MRole role = resp.getRole(); @@ -1572,7 +1572,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable { MUser[] users = MUser.getWithRole(role); for (int i = 0; i < users.length; i++) - sendEMail(client, users[i].getAD_User_ID(), null, subject, message, pdf); + sendEMail(client, users[i].getAD_User_ID(), null, subject, message, pdf, text.isHtml()); } } else if (resp.isOrganization()) @@ -1581,7 +1581,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable if (org.getSupervisor_ID() == 0) log.fine("No Supervisor for AD_Org_ID=" + m_po.getAD_Org_ID()); else - sendEMail(client, org.getSupervisor_ID(), null, subject, message, pdf); + sendEMail(client, org.getSupervisor_ID(), null, subject, message, pdf, text.isHtml()); } } } // sendEMail @@ -1594,9 +1594,10 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable * @param subject subject * @param message message * @param pdf attachment + * @param isHtml isHtml */ private void sendEMail (MClient client, int AD_User_ID, String email, - String subject, String message, File pdf) + String subject, String message, File pdf, boolean isHtml) { if (AD_User_ID != 0) { @@ -1607,7 +1608,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable email = email.trim(); if (!m_emails.contains(email)) { - client.sendEMail(null, user, subject, message, pdf); + client.sendEMail(null, user, subject, message, pdf,isHtml); m_emails.add(email); } }