james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shilpa Dalmia <Shi...@PostX.com>
Subject RE: Re: Matcher/Mailet Library
Date Tue, 14 May 2002 21:49:47 GMT
This is probably most obvious & most likely u must have tried it, but just
in case. Have u made sure u're chaining the mailets correctly & your config
file has correct entries for ur mailet? Make sure the foll. is happening
1. Your mailet is being invoked.
2. Check if your mailet is setting the state correctly to be written back to
the spool & transferred to the next mailet.

Shilpa

-----Original Message-----
From: Samuel Sadek [mailto:samuel_sadek@hotmail.com]
Sent: Tuesday, May 14, 2002 12:40 PM
To: james-dev@jakarta.apache.org
Subject: Fwd: Re: Matcher/Mailet Library


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>

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