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]>