svn commit: r450699 - /incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r450699 - /incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java

hansbak-2
Author: hansbak
Date: Wed Sep 27 22:14:50 2006
New Revision: 450699

URL: http://svn.apache.org/viewvc?view=rev&rev=450699
Log:
Make the storeIcomingEmail service more resistant agianst variations in the email header. Corrected several problems and do not accept the email when the 'from' email address is missing.

Modified:
    incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java

Modified: incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java?view=diff&rev=450699&r1=450698&r2=450699
==============================================================================
--- incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java (original)
+++ incubator/ofbiz/trunk/applications/content/src/org/ofbiz/content/email/EmailServices.java Wed Sep 27 22:14:50 2006
@@ -580,6 +580,8 @@
      InternetAddress emailAddress = null;
      Map map = null;
      Map result = null;
+        
+        if (addresses == null) return null;
     
      if (addresses.length > 0) {
      Address addr = addresses[0];
@@ -698,7 +700,9 @@
         try {
             String contentTypeRaw = message.getContentType();
             int idx = contentTypeRaw.indexOf(";");
+            if (idx == -1) idx = contentTypeRaw.length();
             contentType = contentTypeRaw.substring(0, idx);
+            if (contentType == null || contentType.equals("")) contentType = "text/html";
             Address [] addressesFrom = message.getFrom();
             Address [] addressesTo = message.getRecipients(MimeMessage.RecipientType.TO);
             Address [] addressesCC = message.getRecipients(MimeMessage.RecipientType.CC);
@@ -715,6 +719,12 @@
                     ServiceUtil.returnSuccess();
                 }
             }
+
+            // if no 'from' addresses specified ignore the message
+            if (addressesFrom == null) {
+                Debug.logInfo("Incoming Email message ignored, had not 'from' email address", module);
+                ServiceUtil.returnSuccess();
+            }
             
             result = getParyInfoFromEmailAddress(addressesFrom, userLogin, dispatcher);
             partyIdFrom = (String)result.get("partyId");
@@ -749,15 +759,17 @@
      if (contentType.startsWith("text")) {
      content = (String)message.getContent();
          commEventMap.put("contentMimeTypeId", contentType);
-     } else if (contentType.startsWith("multipart")) {
+     } else if (contentType.startsWith("multipart") || contentType.startsWith("Multipart")) {
      multipart = (Multipart)message.getContent();
      int multipartCount = multipart.getCount();
      for (int i=0; i < multipartCount; i++) {
      Part part = multipart.getBodyPart(i);
      String thisContentTypeRaw = part.getContentType();
                 int idx2 = thisContentTypeRaw.indexOf(";");
+                    if (idx2 == -1) idx2 = thisContentTypeRaw.length();
                 String thisContentType = thisContentTypeRaw.substring(0, idx2);
-     String disposition = part.getDisposition();
+                    if (thisContentType == null || thisContentType.equals("")) thisContentType = "text/html";
+                    String disposition = part.getDisposition();
     
      // See this case where the disposition of the inline text is null
      if ((disposition == null) && (i == 0) && thisContentType.startsWith("text"))
@@ -788,13 +800,12 @@
          commEventMap.put("contactMechIdFrom", contactMechIdFrom);
          commEventMap.put("contactMechIdTo", contactMechIdTo);
          commEventMap.put("statusId", "COM_ENTERED");
-         } else {
-                // create a task to find party for email
-         commEventMap.put("statusId", "COM_UNKNOWN_PARTY");
-         commNote = "Sent from: " + UtilMisc.toListArray(addressesFrom).toString();
-         }
+            } else {
+                commEventMap.put("statusId", "COM_UNKNOWN_PARTY");
+                commNote += "Sent from: " + ((InternetAddress)addressesFrom[0]).getAddress();
+            }
      if (partyIdTo == null) {
-                commNote += "Sent to: " + UtilMisc.toListArray(addressesTo).toString();
+                commNote += "Sent to: " + ((InternetAddress)addressesTo[0]).getAddress();
             }
             
             if (!("".equals(commNote))) {
@@ -804,7 +815,15 @@
      commEventMap.put("userLogin", userLogin);
      result = dispatcher.runSync("createCommunicationEvent", commEventMap);
      communicationEventId = (String)result.get("communicationEventId");
-     if (contentType.startsWith("multipart")) {
+            
+     // 'system' Id has no partyId but needed for prefix generation of the creation of related contentId and dataresourceId.
+     if (userLogin.get("partyId") == null) {
+        int ch = 0;
+        for (ch=communicationEventId.length(); ch > 0 && Character.isDigit(communicationEventId.charAt(ch-1)); ch--);
+        userLogin.put("partyId", communicationEventId.substring(0,ch)); //allow services to be called to have prefix
+     }
+            
+     if (contentType.startsWith("multipart") || contentType.startsWith("Multipart")) {
      int attachmentCount = EmailWorker.addAttachmentsToCommEvent(message, communicationEventId, contentIndex, dispatcher, userLogin);
      if (Debug.infoOn()) Debug.logInfo(attachmentCount + " attachments added to CommunicationEvent:" + communicationEventId,module);
      }