Author: hansbak Date: Fri Oct 6 16:05:39 2006 New Revision: 453801 URL: http://svn.apache.org/viewvc?view=rev&rev=453801 Log: make use of 'delevered to' email address when the 'from' address cannot be found. Also store this address in the communicationEvent info field when not found'
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=453801&r1=453800&r2=453801 ============================================================================== --- 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 Fri Oct 6 16:05:39 2006 @@ -707,7 +707,9 @@ Address [] addressesTo = message.getRecipients(MimeMessage.RecipientType.TO); Address [] addressesCC = message.getRecipients(MimeMessage.RecipientType.CC); Address [] addressesBCC = message.getRecipients(MimeMessage.RecipientType.BCC); - Debug.logInfo("Processing Incoming Email message from: " + addressesFrom[0].toString() + " to: " + addressesTo[0].toString(), module); + Debug.logInfo("Processing Incoming Email message from: " + + (addressesFrom[0] == null? "not found" : addressesFrom[0].toString()) + " to: " + + (addressesTo[0] == null? "not found" : addressesTo[0].toString()), module); // ignore the message when the spam status = yes String spamHeaderName = UtilProperties.getPropertyValue("general.properties", "mail.spam.name", "N"); @@ -739,8 +741,21 @@ Map firstAddressTo = (Map) itr.next(); partyIdTo = (String)firstAddressTo.get("partyId"); contactMechIdTo = (String)firstAddressTo.get("contactMechId"); - } + } + // if partyIdTo not found try to find the "to" address using the delivered-to header + String deliveredTo = message.getHeader("Delivered-To")[0]; + // check if started with the domain name if yes remove including the dash. + String dn = deliveredTo.substring(deliveredTo.indexOf("@")+1, deliveredTo.length()); + if (deliveredTo.startsWith(dn)) { + deliveredTo = deliveredTo.substring(dn.length()+1, deliveredTo.length()); + } + if (partyIdTo == null) { + result = dispatcher.runSync("findPartyFromEmailAddress", UtilMisc.toMap("address", deliveredTo, "userLogin", userLogin)); + partyIdTo = (String)result.get("partyId"); + contactMechIdTo = (String)result.get("contactMechId"); + } + Map commEventMap = new HashMap(); commEventMap.put("communicationEventTypeId", "AUTO_EMAIL_COMM"); commEventMap.put("contactMechTypeId", "EMAIL_ADDRESS"); @@ -753,13 +768,14 @@ commEventMap.put("datetimeStarted", UtilDateTime.toTimestamp(message.getSentDate())); commEventMap.put("datetimeEnded", UtilDateTime.toTimestamp(message.getReceivedDate())); + // get the content(type) part int contentIndex = -1; Multipart multipart = null; if (contentType.startsWith("text")) { content = (String)message.getContent(); commEventMap.put("contentMimeTypeId", contentType); } else if (contentType.startsWith("multipart") || contentType.startsWith("Multipart")) { - multipart = (Multipart)message.getContent(); + multipart = (Multipart) message.getContent(); int multipartCount = multipart.getCount(); for (int i=0; i < multipartCount; i++) { Part part = multipart.getBodyPart(i); @@ -771,8 +787,7 @@ String disposition = part.getDisposition(); // See this case where the disposition of the inline text is null - if ((disposition == null) && (i == 0) && thisContentType.startsWith("text")) - { + if ((disposition == null) && (i == 0) && thisContentType.startsWith("text")) { content = (String)part.getContent(); if (UtilValidate.isNotEmpty(content)) { contentIndex = i; @@ -781,8 +796,7 @@ } } else if ((disposition != null) && (disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE)) - && thisContentType.startsWith("text")) - { + && thisContentType.startsWith("text")) { content = (String)part.getContent(); contentIndex = i; commEventMap.put("contentMimeTypeId", thisContentType); @@ -806,6 +820,7 @@ commEventMap.put("contactMechIdTo", contactMechIdTo); } else { commNote += "Sent to: " + ((InternetAddress)addressesTo[0]).getAddress() + "; "; + commNote += "Delivered-To: " + deliveredTo + "; "; } if (partyIdTo != null && partyIdFrom != null) { @@ -829,6 +844,7 @@ userLogin.put("partyId", communicationEventId.substring(0,ch)); //allow services to be called to have prefix } + // store attachements 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);