Hi Andrew,

excellent improvements here in the email section of the ofbiz system,
thanks for your help in this area.

Regards,
Hans


On Wed, 2009-05-13 at 03:05 +0000, [email protected] wrote:
> Author: jaz
> Date: Wed May 13 03:05:00 2009
> New Revision: 774178
> 
> URL: http://svn.apache.org/viewvc?rev=774178&view=rev
> Log:
> more improvements to the message wrapper logic for getting attachments and 
> reading multipart messages; added methods to get headers; mail container now 
> marks messages which are too big to process (the max size setting) as read 
> (but never deleted) so they are not always being checked but remain in the 
> mailbox for human review
> 
> Modified:
>     
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/JavaMailContainer.java
>     
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/MimeMessageWrapper.java
> 
> Modified: 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/JavaMailContainer.java
> URL: 
> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/JavaMailContainer.java?rev=774178&r1=774177&r2=774178&view=diff
> ==============================================================================
> --- 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/JavaMailContainer.java
>  (original)
> +++ 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/JavaMailContainer.java
>  Wed May 13 03:05:00 2009
> @@ -305,17 +305,22 @@
>                      long messageSize = message.getSize();
>                      if (message instanceof MimeMessage && messageSize >= 
> maxSize) {
>                          Debug.logWarning("Message from: " + 
> message.getFrom()[0] + "not received, too big, size:" + messageSize + " 
> cannot be more than " + maxSize + " bytes", module);
> +                        
> +                        // set the message as read so it doesn't continue to 
> try to process; but don't delete it
> +                        message.setFlag(Flags.Flag.SEEN, true);
>                      } else {
>                          this.processMessage(message, session);
>                          if (Debug.verboseOn()) Debug.logVerbose("Message 
> from " + UtilMisc.toListArray(message.getFrom()) + " with subject [" + 
> message.getSubject() + "]  has been processed." , module);
>                          message.setFlag(Flags.Flag.SEEN, true);
>                          if (Debug.verboseOn()) Debug.logVerbose("Message [" 
> + message.getSubject() + "] is marked seen", module);
> +                        
> +                        // delete the message after processing
> +                        if (deleteMail) {
> +                            if (Debug.verboseOn()) Debug.logVerbose("Message 
> [" + message.getSubject() + "] is being deleted", module);
> +                            message.setFlag(Flags.Flag.DELETED, true);
> +                        }
>                      }
> -                }
> -                if (deleteMail) {
> -                    if (Debug.verboseOn()) Debug.logVerbose("Message [" + 
> message.getSubject() + "] is being deleted", module);
> -                    message.setFlag(Flags.Flag.DELETED, true);
> -                }
> +                }                
>              }
>  
>              // expunge and close the folder
> 
> Modified: 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/MimeMessageWrapper.java
> URL: 
> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/MimeMessageWrapper.java?rev=774178&r1=774177&r2=774178&view=diff
> ==============================================================================
> --- 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/MimeMessageWrapper.java
>  (original)
> +++ 
> ofbiz/trunk/framework/service/src/org/ofbiz/service/mail/MimeMessageWrapper.java
>  Wed May 13 03:05:00 2009
> @@ -122,6 +122,24 @@
>          return message;
>      }
>      
> +    public String getFirstHeader(String header) {
> +        String[] headers = getHeader(header);
> +        if (headers != null && headers.length > 0) {
> +            return headers[0];
> +        } else {
> +            return null;
> +        }
> +    }
> +    public String[] getHeader(String header) {
> +        MimeMessage message = getMessage();
> +        try {
> +            return message.getHeader(header);
> +        } catch (MessagingException e) {
> +            Debug.logError(e, module);
> +            return null;
> +        }
> +    }
> +    
>      public Address[] getFrom() {
>          MimeMessage message = getMessage();
>          try {
> @@ -235,14 +253,16 @@
>                  String idx = Integer.toString(i);
>                  if (subPartCount > 0) {
>                      for (int si = 0; si < subPartCount; si++) {
> -                        String sidx = idx + "." + Integer.toString(si);
> -                        if (getPartDisposition(sidx) != null && 
> getPartDisposition(sidx).equals(Part.ATTACHMENT)) {
> -                            attachments.add(sidx);
> +                        String sidx = idx + "." + Integer.toString(si);      
>                   
> +                        if (getPartDisposition(sidx) != null && 
> (getPartDisposition(sidx).equals(Part.ATTACHMENT) ||
> +                                
> getPartDisposition(sidx).equals(Part.INLINE))) {
> +                            attachments.add(sidx);                        
>                          }
>                      }
> -                } else {
> -                    if (getPartDisposition(idx) != null && 
> getPartDisposition(idx).equals(Part.ATTACHMENT)) {
> -                        attachments.add(idx);
> +                } else {                    
> +                    if (getPartDisposition(idx) != null && 
> (getPartDisposition(idx).equals(Part.ATTACHMENT) ||
> +                            getPartDisposition(idx).equals(Part.INLINE))) {
> +                        attachments.add(idx);                    
>                      }
>                  }
>              }
> @@ -268,8 +288,10 @@
>                  if (subPartCount > 0) {
>                      for (int si = 0; si < subPartCount; si++) {
>                          String sidx = idx + "." + Integer.toString(si);
> -                        if (getPartDisposition(sidx) == null || 
> getPartDisposition(sidx).equals(Part.INLINE)) {
> -                            body.append(getPartText(sidx)).append("\n");    
> +                        if (getPartContentType(sidx) != null && 
> getPartContentType(sidx).toLowerCase().startsWith("text")) {
> +                            if (getPartDisposition(sidx) == null || 
> getPartDisposition(sidx).equals(Part.INLINE)) {
> +                                body.append(getPartText(sidx)).append("\n"); 
>    
> +                            }
>                          }
>                      }
>                  } else {
> @@ -285,6 +307,36 @@
>          }        
>      }
>      
> +    public String getMessageBodyContentType() {
> +        String contentType = getContentType();
> +        if (contentType != null && 
> contentType.toLowerCase().startsWith("text")) {
> +            return contentType;
> +        } else {
> +            for (int i = 0; i < getMainPartCount(); i++) {
> +                int subPartCount = getSubPartCount(i);
> +                String idx = Integer.toString(i);
> +                if (subPartCount > 0) {
> +                    for (int si = 0; si < subPartCount; si++) {
> +                        String sidx = idx + "." + Integer.toString(si);
> +                        if (getPartContentType(sidx) != null && 
> getPartContentType(sidx).toLowerCase().startsWith("text")) {
> +                            if (getPartDisposition(sidx) == null || 
> getPartDisposition(sidx).equals(Part.INLINE)) {
> +                                return getPartContentType(sidx);  
> +                            }
> +                        }
> +                    }
> +                } else {
> +                    if (getPartContentType(idx) != null && 
> getPartContentType(idx).toLowerCase().startsWith("text")) {
> +                        // make sure the part isn't an attachment
> +                        if (getPartDisposition(idx) == null || 
> getPartDisposition(idx).equals(Part.INLINE)) {
> +                            return getPartContentType(idx);                  
>     
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +        return "text/html";
> +    }
> +    
>      public String getMessageRawText() {
>          MimeMessage message = getMessage();
>          try {
> @@ -482,7 +534,7 @@
>          byte[] buffer = new byte[4096];
>          try {            
>              for (int n; (n = stream.read(buffer)) != -1;) {
> -                baos.write(n);
> +                baos.write(buffer, 0, n);
>              }
>          } catch (IOException e) {
>              Debug.logError(e, module);
> 
> 
-- 
Antwebsystems.com: Quality OFBiz services for competitive rates

Reply via email to