diff --git a/distro/changelog.xml b/distro/changelog.xml index aa27c74..723017e 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -48,4 +48,7 @@ Implemented direct email sending through an external SMTP Server (if available in the infrastructure) + +Updated email format to actually send text plain emails without garbling html + diff --git a/pom.xml b/pom.xml index 2c9f035..c0f54f5 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.gcube.applicationsupportlayer aslsocial - 0.11.0-SNAPSHOT + 0.12.0-SNAPSHOT jar Social Portal ASL Extension @@ -44,7 +44,7 @@ org.gcube.common.portal - portal-manager + portal-manager provided @@ -59,7 +59,7 @@ org.gcube.portal - social-networking-library + social-networking-library org.gcube.dvos @@ -83,19 +83,24 @@ org.gcube.core - common-encryption + common-encryption provided org.gcube.contentmanagement - storage-manager-core - provided + storage-manager-core + provided org.gcube.contentmanagement storage-manager-wrapper provided + + org.jsoup + jsoup + 1.6.2 + com.liferay.portal portal-service @@ -114,7 +119,7 @@ commons-net - commons-net + commons-net provided diff --git a/src/main/java/org/gcube/applicationsupportlayer/social/mailing/EmailPlugin.java b/src/main/java/org/gcube/applicationsupportlayer/social/mailing/EmailPlugin.java index 7e1fea2..1e4f430 100644 --- a/src/main/java/org/gcube/applicationsupportlayer/social/mailing/EmailPlugin.java +++ b/src/main/java/org/gcube/applicationsupportlayer/social/mailing/EmailPlugin.java @@ -16,6 +16,11 @@ import javax.mail.internet.MimeMultipart; import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portal.databook.shared.Notification; import org.gcube.portal.databook.shared.NotificationType; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.nodes.Node; +import org.jsoup.nodes.TextNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -90,9 +95,8 @@ public class EmailPlugin { private static String getTextEmail(Notification notification2Save, String userFirstName, String portalURL, String email) { - String removedMarkup = notification2Save.getDescription().replaceAll("&", "&"); - removedMarkup = removedMarkup.replaceAll(">", ">"); - removedMarkup = removedMarkup.replaceAll("<", "<"); + String removedMarkup = convertHTML2Text(notification2Save.getDescription()); + String sender = notification2Save.getSenderFullName(); if (notification2Save.getType() == NotificationType.DOCUMENT_WORKFLOW_STEP_REQUEST_TASK) @@ -117,6 +121,55 @@ public class EmailPlugin { return body.toString(); } + + + + /** + * Convert html into simple text + * + */ + protected static String convertHTML2Text(String html) { + if (html == null) { + return null; + } + String removedMarkup = html.replaceAll("&", "&"); + removedMarkup = removedMarkup.replaceAll(">", ">"); + removedMarkup = removedMarkup.replaceAll("<", "<"); + String text = removedMarkup; + try { + Document document = Jsoup.parse(removedMarkup); + Element body = document.body(); + text = buildStringFromNode(body).toString(); + } + catch (Exception e) { + _log.error("While converting HTML into text: " +e.getMessage()); + return removedMarkup; + } + return text; + } + + private static StringBuffer buildStringFromNode(Node node) { + StringBuffer buffer = new StringBuffer(); + + if (node instanceof TextNode) { + TextNode textNode = (TextNode) node; + buffer.append(textNode.text().trim()); + } + + for (Node childNode : node.childNodes()) { + buffer.append(buildStringFromNode(childNode)); + } + + if (node instanceof Element) { + Element element = (Element) node; + String tagName = element.tagName(); + if ("p".equals(tagName) || "br".equals(tagName)) { + buffer.append("\n"); + } + } + + return buffer; + } private static String getActionLink(Notification notification2Save, String portalURL) { StringBuilder actionLink = new StringBuilder("