<?xml version="1.0" encoding="UTF-8"?> | |
<!-- | |
Licensed to the Apache Software Foundation (ASF) under one | |
or more contributor license agreements. See the NOTICE file | |
distributed with this work for additional information | |
regarding copyright ownership. The ASF licenses this file | |
to you under the Apache License, Version 2.0 (the | |
"License"); you may not use this file except in compliance | |
with the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, | |
software distributed under the License is distributed on an | |
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
KIND, either express or implied. See the License for the | |
specific language governing permissions and limitations | |
under the License. | |
--> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<!-- Generated by Apache Maven Doxia at Apr 17, 2012 --> | |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
<title>Usage</title> | |
<style type="text/css" media="all"> | |
@import url("./css/james.css"); | |
@import url("./css/maven-base.css"); | |
@import url("./css/maven-theme.css"); | |
@import url("./css/site.css"); | |
@import url("./js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css"); | |
@import url("./js/jquery/css/print.css"); | |
@import url("./js/fancybox/jquery.fancybox-1.3.4.css"); | |
</style> | |
<script type="text/javascript" src="./js/jquery/js/jquery-1.4.2.min.js"></script> | |
<script type="text/javascript" src="./js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script> | |
<script type="text/javascript" src="./js/fancybox/jquery.fancybox-1.3.4.js"></script> | |
<link rel="stylesheet" href="./css/print.css" type="text/css" media="print" /> | |
<meta name="Date-Revision-yyyymmdd" content="20120417" /> | |
<meta http-equiv="Content-Language" content="en" /> | |
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/> | |
<!-- Google Analytics --> | |
<script type="text/javascript"> | |
var _gaq = _gaq || []; | |
_gaq.push(['_setAccount', 'UA-1384591-1']); | |
_gaq.push(['_trackPageview']); | |
(function() { | |
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |
var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); | |
})(); | |
</script> | |
</head> | |
<body class="composite"> | |
<div id="banner"> | |
<a href="../" id="bannerLeft" title="james-mime4j-logo.gif"> | |
<img src="images/logos/james-mime4j-logo.gif" alt="JAMES Mime4J" /> | |
</a> | |
<a href="http://www.apache.org/index.html" id="bannerRight"> | |
<img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" /> | |
</a> | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
<div id="breadcrumbs"> | |
<div class="xleft"> | |
<span id="publishDate">Last Published: 2012-04-17</span> | |
</div> | |
<div class="xright"> <a href="../index.html" title="Home">Home</a> | |
| | |
<a href="../server/index.html" title="Server">Server</a> | |
| | |
<a href="../hupa/index.html" title="Hupa">Hupa</a> | |
| | |
<a href="../protocols/index.html" title="Protocols">Protocols</a> | |
| | |
<a href="../imap/index.html" title="IMAP">IMAP</a> | |
| | |
<a href="../mailet/index.html" title="Mailets">Mailets</a> | |
| | |
<a href="../mailbox/index.html" title="Mailbox">Mailbox</a> | |
| | |
<a href="index.html" title="Mime4J">Mime4J</a> | |
| | |
<a href="../jsieve/index.html" title="jSieve">jSieve</a> | |
| | |
<a href="../jspf/index.html" title="jSPF">jSPF</a> | |
| | |
<a href="../jdkim/index.html" title="jDKIM">jDKIM</a> | |
| | |
<a href="../mpt/index.html" title="MPT">MPT</a> | |
| | |
<a href="../postage/index.html" title="Postage">Postage</a> | |
</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
<div id="leftColumn"> | |
<div id="navcolumn"> | |
<h5>Documentation</h5> | |
<ul> | |
<li class="none"> | |
<a href="index.html" title="Overview">Overview</a> | |
</li> | |
<li class="none"> | |
<a href="status.html" title="Status">Status</a> | |
</li> | |
<li class="none"> | |
<a href="samples.html" title="Example">Example</a> | |
</li> | |
<li class="none"> | |
<strong>Usage</strong> | |
</li> | |
</ul> | |
<h5>Developers Corner</h5> | |
<ul> | |
<li class="none"> | |
<a href="start/download.html" title="Download">Download</a> | |
</li> | |
<li class="none"> | |
<a href="start/build.html" title="Build">Build</a> | |
</li> | |
</ul> | |
<h5>References</h5> | |
<ul> | |
<li class="none"> | |
<a href="apidocs/index.html" title="Javadoc">Javadoc</a> | |
</li> | |
<li class="none"> | |
<a href="http://issues.apache.org/jira/browse/MIME4J/" title="Issue Tracker">Issue Tracker</a> | |
</li> | |
</ul> | |
<h5>Related Projects</h5> | |
<ul> | |
<li class="none"> | |
<a href="http://hc.apache.org/httpcomponents-client/httpmime/index.html" title="httpmime">httpmime</a> | |
</li> | |
</ul> | |
<h5>About James</h5> | |
<ul> | |
<li class="none"> | |
<a href="../index.html" title="Overview">Overview</a> | |
</li> | |
<li class="none"> | |
<a href="../newsarchive.html" title="News">News</a> | |
</li> | |
<li class="none"> | |
<a href="../mail.html" title="Mailing Lists">Mailing Lists</a> | |
</li> | |
<li class="none"> | |
<a href="../contribute.html" title="Contributing">Contributing</a> | |
</li> | |
<li class="none"> | |
<a href="../guidelines.html" title="Guidelines">Guidelines</a> | |
</li> | |
<li class="none"> | |
<a href="http://wiki.apache.org/james" title="Wiki">Wiki</a> | |
</li> | |
<li class="none"> | |
<a href="../team-list.html" title="Who We Are">Who We Are</a> | |
</li> | |
<li class="none"> | |
<a href="../license.html" title="License">License</a> | |
</li> | |
</ul> | |
<h5>Download</h5> | |
<ul> | |
<li class="none"> | |
<a href="../download.cgi" title="Releases">Releases</a> | |
</li> | |
<li class="none"> | |
<a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></a> | |
</li> | |
</ul> | |
<h5>Apache Software Foundation</h5> | |
<ul> | |
<li> | |
<strong> | |
<a title="ASF" href="http://www.apache.org/">ASF</a> | |
</strong> | |
</li> | |
<li> | |
<a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> | |
</li> | |
<li> | |
<a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> | |
</li> | |
<li> | |
<a title="License" href="http://www.apache.org/licenses/" >License</a> | |
</li> | |
<li> | |
<a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> | |
</li> | |
<li> | |
<a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> | |
</li> | |
<li> | |
<a title="Security" href="http://www.apache.org/security/">Security</a> | |
</li> | |
</ul> | |
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> | |
<img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /> | |
</a> | |
</div> | |
</div> | |
<div id="bodyColumn"> | |
<div id="contentBox"> | |
<!-- Licensed to the Apache Software Foundation (ASF) under one --><!-- or more contributor license agreements. See the NOTICE file --><!-- distributed with this work for additional information --><!-- regarding copyright ownership. The ASF licenses this file --><!-- to you under the Apache License, Version 2.0 (the --><!-- "License"); you may not use this file except in compliance --><!-- with the License. You may obtain a copy of the License at --><!-- --><!-- http://www.apache.org/licenses/LICENSE-2.0 --><!-- --><!-- Unless required by applicable law or agreed to in writing, --><!-- software distributed under the License is distributed on an --><!-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY --><!-- KIND, either express or implied. See the License for the --><!-- specific language governing permissions and limitations --><!-- under the License. --><div class="section"><h2><a name="Usage">Usage</a></h2><p>Mime4j provides two different API's: An event based API by using the <a href="./apidocs/org/apache/james/mime4j/parser/MimeStreamParser.html"> MimeStreamParser</a>. Alternatively, you may use the iterative API, which is available through the <a href="./apidocs/org/apache/james/mime4j/parser/MimeTokenStream.html"> MimeTokenStream</a>. In terms of speed, you should not note any differences.</p><ul><li><a href="#Token_Streams">Token Streams</a></li><li><a href="#Sample_Token_Stream">Sample Token Stream</a></li><li><a href="#Event_Handlers">Event Handlers</a></li><li><a href="#Sample_Event_Stream">Sample Event Stream</a></li></ul></div><div class="section"><h2><a name="Token_Streams">Token Streams</a></h2><p>The iterative approach is using the class <a href="./apidocs/org/apache/james/mime4j/parser/MimeTokenStream.html"> MimeTokenStream</a>. Here's an example, how you could use the token stream:</p><div><pre> MimeTokenStream stream = new MimeTokenStream(); | |
stream.parse(new FileInputStream("mime.msg")); | |
for (EntityState state = stream.getState(); | |
state != EntityState.T_END_OF_STREAM; | |
state = stream.next()) { | |
switch (state) { | |
case T_BODY: | |
System.out.println("Body detected, contents = " | |
+ stream.getInputStream() + ", header data = " | |
+ stream.getBodyDescriptor()); | |
break; | |
case T_FIELD: | |
System.out.println("Header field detected: " | |
+ stream.getField()); | |
break; | |
case T_START_MULTIPART: | |
System.out.println("Multipart message detexted," | |
+ " header data = " | |
+ stream.getBodyDescriptor()); | |
... | |
} | |
}</pre></div><p>The token stream provides a set of tokens. Tokens are identified by a state. Most states are simply event indicators, with no additional data available. However, there are some states, which provide additional data. For example, the state <tt>T_BODY</tt>, which indicates that an actual body is available, If you note this state, then you may ask for the bodies contents, which are provided through the <tt>getInputStream()</tt> method, or you might ask for the header data by invoking <tt>getBodyDescriptor()</tt>.</p></div><div class="section"><h2><a name="Sample_Token_Stream">Sample Token Stream</a></h2><p>The following sample should give you a rough idea of the order, in which you'll receive tokens:</p><div><pre> T_START_MESSAGE | |
T_START_HEADER | |
T_FIELD | |
T_FIELD | |
... | |
T_END_HEADER | |
T_START_MULTIPART | |
T_PREAMBLE | |
T_START_BODYPART | |
T_START_HEADER | |
T_FIELD | |
T_FIELD | |
... | |
T_END_HEADER | |
T_BODY | |
T_END_BODYPART | |
T_START_BODYPART | |
T_START_HEADER | |
T_FIELD | |
T_FIELD | |
... | |
T_END_HEADER | |
T_BODY | |
T_END_BODYPART | |
T_EPILOGUE | |
T_END_MULTIPART | |
T_END_MESSAGE</pre></div><p>The example shows a multipart message with two parts.</p></div><div class="section"><h2><a name="Event_Handlers">Event Handlers</a></h2><p>The event based API requires, that you provide an event handler, which receives events. The event handler is an object, which implements the <a href="./apidocs/org/apache/james/mime4j/parser/ContentHandler.html"> ContentHandler</a> interface. Here's an example, how you could implement an event handler:</p><div><pre> public class MyContentHandler extends AbstractContentHandler { | |
public void body(BodyDescriptor bd, InputStream is) | |
throws MimeException, IOException { | |
System.out.println("Body detected, contents = " | |
+ is + ", header data = " + bd); | |
} | |
public void field(String fieldData) throws MimeException { | |
System.out.println("Header field detected: " | |
+ fieldData); | |
} | |
public void startMultipart(BodyDescriptor bd) throws MimeException { | |
System.out.println("Multipart message detexted, header data = " | |
+ bd); | |
} | |
... | |
}</pre></div><p>A little bit of additional code allows us to create an example, which is functionally equivalent to the example from the section on <a href="#Token_Streams">Token Streams</a>:</p><div><pre> ContentHandler handler = new MyContentHandler(); | |
MimeStreamParser parser = new MimeStreamParser(); | |
parser.setContentHandler(handler); | |
parser.parse(new FileInputStream("mime.msg"));</pre></div></div><div class="section"><h2><a name="Sample_Event_Stream">Sample Event Stream</a></h2><p>Like above for tokens, we provide an additional example, which demonstrates the typical order of events that you have to expect:</p><div><pre> startMessage() | |
startHeader() | |
field(...) | |
field(...) | |
... | |
endHeader() | |
startMultipart() | |
preamble(...) | |
startBodyPart() | |
startHeader() | |
field(...) | |
field(...) | |
... | |
endHeader() | |
body() | |
endBodyPart() | |
startBodyPart() | |
startHeader() | |
field(...) | |
field(...) | |
... | |
endHeader() | |
body() | |
endBodyPart() | |
epilogue(...) | |
endMultipart() | |
endMessage()</pre></div></div> | |
</div> | |
</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
<div id="footer"> | |
<div class="xright">Copyright © 2004-2012 | |
<a href="http://www.apache.org/">The Apache Software Foundation</a>. | |
All Rights Reserved. | |
</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
</body> | |
</html> |