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("