I would appreciate it if anyone can provide some useful input into this 
issue.

Thanks,

Sam.


>From: "Samuel Sadek" <[EMAIL PROTECTED]>
>Reply-To: "James Users List" <[EMAIL PROTECTED]>
>To: [EMAIL PROTECTED]
>Subject: Re: Matcher/Mailet Library
>Date: Tue, 14 May 2002 18:56:45 +0100
>
>Noel,
>
>I have successfully reformatted the body attachment message, and have used
>the Mail.setMessage(MimeMessage) method to modify the original multipart
>message content. When I then referred to the actual file content it still
>had the body attachment line length of 60? Why hasn't the method updated 
>the
>message content with the newly recreated version with the 76 line length
>reformat using the mentioned method?
>
>Please find the following mailet which does the actual reformatting:
>
>public class ReformatAttachment extends GenericMailet {
>
>       /*public void init() throws MessagingException {
>    }*/
>
>    /**
>     * Reformats all body attachment line lengths to a max of 76 chars
>        * as per SMTP standard.
>     */
>    public void service(Mail mail) throws MessagingException {
>               MimeMessage message = mail.getMessage();
>
>               if (message.isMimeType("multipart/*"))
>               {
>                       //Create the reply message
>                       MimeMessage reply = new
>MimeMessage(Session.getDefaultInstance(System.getProperties(), null));
>                       //Copy all headers
>                       Enumeration heads = message.getAllHeaders();
>                       while (heads.hasMoreElements()) {
>                               Header head = (Header)heads.nextElement();
>                               if (head.getValue() != null)
>                                       reply.addHeader(head.getName(), 
>head.getValue());
>                       }
>
>                       try {
>                               //Create the message body
>                               MimeMultipart multipart = new MimeMultipart();
>                               MimeBodyPart origPart = null;
>
>                               int c = 0;
>                               for (MimeMultipart multi = 
>(MimeMultipart)message.getContent(); c <
>multi.getCount(); c++)
>                               {
>                                       MimeBodyPart part = new MimeBodyPart();
>                                       origPart = (MimeBodyPart)multi.getBodyPart(c);
>
>                                       //Copy all part's headers
>                                       Enumeration partheads = 
>origPart.getAllHeaders();
>
>                                       if (partheads != null)
>                                       {
>                                               while (partheads.hasMoreElements()) {
>                                                 Header header = 
>(Header)partheads.nextElement();
>                                                 if (header.getValue() != null)
>                                                         
>part.addHeader(header.getName(), header.getValue());
>                                               }
>                                       }
>
>                                       if (origPart.isMimeType("text/*") ||
>"text/*".equalsIgnoreCase(origPart.getContentType()))
>                                       {
>                                           part.setContent(origPart.getContent(), 
>origPart.getContentType());
>                                       }
>                                       // ...else reformat content line lengths to 76 
>max chars
>                                       else
>                                       {
>                                         //Create the message
>                                         ByteArrayOutputStream bout = new 
>ByteArrayOutputStream();
>                             OutputStream out = (OutputStream) bout;
>                                         InputStream in = null;
>                                         //InputStream in = origPart.getInputStream();
>                                         Object obj = origPart.getContent();
>                                         int i = 1;
>                                         int b = -1;
>                                         if (obj instanceof InputStream)
>                                         {
>                                                 String enc = origPart.getEncoding();
>                                                 in = 
>MimeUtility.decode((InputStream)obj, enc);
>                                                 //Read in every byte
>                                                 while ((b = in.read()) != -1)
>                                                 {
>                                         if ( i == 77 )  {
>out.write(10);
>                                                                 i = 1;
>                                                         }
>                                                         if ( b != 10 )
>                                                         {
>                                                                 out.write(b);
>                 i++;
>                                                         }
>                                                 }
>                                                 out = MimeUtility.encode(out, enc);
>                                                 out.flush();
>                                                 out.close();
>                                         } // End if
>
>                                         //create the datasource
>                                         MimeBodyPartDataSource mbpds =
>                                         new MimeBodyPartDataSource(
>                                           origPart.getContentType(), 
>origPart.getFileName(),
>bout.toByteArray()
>                                         );
>                                         part.setDataHandler(new DataHandler(mbpds));
>                                         part.setFileName(origPart.getFileName());
>                                         part.setDisposition("Attachment");
>                                       } // End if
>                                       multipart.addBodyPart(part);
>                               } // End for
>                               reply.setContent(multipart);
>                               reply.setHeader("Content-Type", 
>multipart.getContentType());
>                       } catch (IOException ioe) {
>                               ioe.printStackTrace();
>                               throw new MailetException("Unable to create multipart 
>body");
>                       }
>                       //Pass the revised MimeMessage for further processing...
>                       mail.setMessage(reply);
>                       System.out.println("step 6...");
>               } // End if
>    }
>
>    public String getMailetInfo() {
>        return "ReformatAttachment Mailet";
>    }
>}
>
>And the auxiliart class:
>
>public class MimeBodyPartDataSource
>       implements DataSource {
>
>       //instance attributes
>       private String m_Type;
>       private String m_Name;
>       private byte[] m_Data;
>
>       /**
>        * Constructs a <code>MimeBodyPartDataSource</code>
>        * instance.
>        *
>        * @param type the content type of the constructed instance
>        *        as <code>String</code>.
>        * @param name the name of the constructed instance
>        *        as <code>String</code>.
>        * @param data the data of the constructed instance as
>        *        <code>byte[]</code>.
>        *
>        * @return the newly constructed <code>MimeBodyPartDataSource
>        *         </code>.
>        */
>        public MimeBodyPartDataSource(
>               String type, String name, byte[] data) {
>               m_Type=type;
>               m_Name=name;
>               m_Data=data;
>        }//constructor
>
>       /**
>        * Returns the content type of this instance as
>        * <code>String</code>.
>     * <p>(DataSource implementation)
>        *
>        * @return the content type as <code>String</code>
>        */
>        public String getContentType(){
>               return m_Type;
>        }//getContentType
>
>       /**
>        * Returns the name of this instance as <code>String</code>.
>        * <p>(DataSource implementation)
>        *
>        * @return the name as <code>String</code>
>        */
>        public String getName(){
>               return m_Name;
>        }//getName
>
>       /**
>        * Returns the data of this instance as <code>
>        * InputStream</code>.
>     * <p>(DataSource implementation); wraps the data
>     * into a <code>ByteArrayInputStream</code>.
>        *
>        * @return the data of this instance as
>        *         <code>InputStream</code>.
>        * @throws IOException if impossible.
>        */
>        public InputStream getInputStream()
>                       throws IOException {
>
>               return new ByteArrayInputStream(m_Data);
>        }//getInputStream
>
>       /**
>        * Throws an IOException in this implementation, because
>        * this instance represents a read-only <code>DataSource</code>.
>        * <p>(DataSource implementation)
>        *
>        * @return an <code>OutputStream</code> instance for writing
>        *         to this <code>DataSource</code>.
>        * @throws IOException if impossible.
>        */
>        public OutputStream getOutputStream()
>                       throws IOException {
>
>               throw new IOException(
>                       "Not supported."
>               );
>        }//getOutputStream
>
>}//class MimeBodyPartDataSource
>
>
>I would appreciate your input prior to patch submission.
>
>Thanks in advance.
>
>Sam.
>
>
>
>>From: "Noel J. Bergman" <[EMAIL PROTECTED]>
>>Reply-To: "James Users List" <[EMAIL PROTECTED]>
>>To: "James Users List" <[EMAIL PROTECTED]>
>>CC: "James-Dev Mailing List" <[EMAIL PROTECTED]>
>>Subject: Matcher/Mailet Library
>>Date: Tue, 14 May 2002 13:20:32 -0400
>>
>> > I have resolved this issue throught the creation of special processing
>> > mailet which reformats all binary content type mimebodypart attachments
>>to
>>a
>> > fixed length of 76 characters. This was needed for IMAP protocol
>>processing
>> > because it cannot handle 60 character widths sent from Hotmail.com,
>> > Yahoo.com, Fastmail.fm mail servers. If you want I can submit this
>>mailet
>> > and associating config settings. Without this patch, JAMES IMAP server
>>will
>> > not be able to read in mimemultipart body attachments properly.
>>
>>My suggestion is yes, please do submit it.
>>
>>On a related note, is anything being done about a repository/library of
>>contributed matchers and mailets?  That would be quite handy, since I
>>presume that not everyone's matcher and mailet will be added to the
>>distribution.  If not, I will consider undertaking that as a project.
>>
>>I envision storing the library in a database.  What fields would people
>>want?
>>
>>      - name of component
>>      - description
>>      - version
>>      - status (stable, unstable, ...)
>>      - version of James necessary
>>      - author (valid e-mail required)
>>      - homepage (if the author will maintain an online presence)
>>      - download (.ZIP or .TAR distribution)
>>
>>Thoughts?
>>
>>      --- Noel
>>
>>
>>--
>>To unsubscribe, e-mail:
>><mailto:[EMAIL PROTECTED]>
>>For additional commands, e-mail:
>><mailto:[EMAIL PROTECTED]>
>>
>
>
>_________________________________________________________________
>MSN Photos is the easiest way to share and print your photos:
>http://photos.msn.com/support/worldwide.aspx
>
>
>--
>To unsubscribe, e-mail:   
><mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: 
><mailto:[EMAIL PROTECTED]>
>


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to