james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Samuel Sadek" <samuel_sa...@hotmail.com>
Subject Fwd: Re: Matcher/Mailet Library
Date Tue, 14 May 2002 19:40:06 GMT
I would appreciate it if anyone can provide some useful input into this 
issue.

Thanks,

Sam.


>From: "Samuel Sadek" <samuel_sadek@hotmail.com>
>Reply-To: "James Users List" <james-user@jakarta.apache.org>
>To: james-user@jakarta.apache.org
>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" <noel@devtech.com>
>>Reply-To: "James Users List" <james-user@jakarta.apache.org>
>>To: "James Users List" <james-user@jakarta.apache.org>
>>CC: "James-Dev Mailing List" <james-dev@jakarta.apache.org>
>>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:james-user-unsubscribe@jakarta.apache.org>
>>For additional commands, e-mail:
>><mailto:james-user-help@jakarta.apache.org>
>>
>
>
>_________________________________________________________________
>MSN Photos is the easiest way to share and print your photos:
>http://photos.msn.com/support/worldwide.aspx
>
>
>--
>To unsubscribe, e-mail:   
><mailto:james-user-unsubscribe@jakarta.apache.org>
>For additional commands, e-mail: 
><mailto:james-user-help@jakarta.apache.org>
>


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


--
To unsubscribe, e-mail:   <mailto:james-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:james-dev-help@jakarta.apache.org>


Mime
View raw message