blob: 4438e7590d11a1cb083753d380ad9423afbfed28 [file] [log] [blame]
<!-- saved from url=(0022)http://internet.e-mail -->
<html>
<head>
<meta http-equiv="content-type" content="">
<title>Mail transport</title>
<link href="../css/axis-docs.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body lang="en">
<h1>Mail Transport Configuration</h1>
<p>This document provides the guidelines on how to configure Axis2 in order
to get the mail transport working.</p>
<p><i>Send your feedback or questions to: <a
href="mailto:axis-dev@ws.apache.org">axis-dev@ws.apache.org</a></i>. Prefix
subject with [Axis2]. To subscribe to mailing list see <a
href="http://ws.apache.org/axis2/mail-lists.html">here.</a></p>
<h2>Content</h2>
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#sender">Transport Sender</a></li>
<li><a href="#receiver">Transport Receiver</a></li>
<li><a href="#server">Using Mail Transport in the Server Side</a></li>
<li><a href="#james">Configure James as SMTP and POP Server</a></li>
<li><a href="#included">Using the Included Mail Server</a></li>
</ul>
<a name="intro"></a>
<h2>Introduction</h2>
<p>The inner workings of the mail transport has been divided into two parts,
the transport sender for SMTP and the transport listener for POP3. The
transport listener will listen to a particular email address periodically.
When an email comes in it will be tunneled into an Axis2 engine. On the other
hand, mail transport sender sends emails to a mail server for a particular
email address.</p>
<p>Mail transport can be used against a generic mail server or it can be used
like a mailet. The simple mailet provided with Axis2 will direct any message
that is coming to a particular address into the Axis engine. The engine will
process the message and will use the Transport sender to send the reply.</p>
<p>The mail transports have been written with the use of Sun's JavaMail and
Activation jars. These should be available in your classpath to get the mail
transport work.</p>
<a name="sender"></a>
<h2>Transport Sender</h2>
<p>You need to have a mail account to activate the mail functionality. This
can either be a generic mail server or you can start up a James mail server,
which will be available <a href="http://james.apache.org/">here</a>.</p>
<p>JavaMail sets its properties to a Properties object. In Axis2, this has
been mapped to a Parameter object. Mapping has been done as follows,</p>
<ul>
<li>Every JavaMail property can be set to @name of the &lt;parameter/&gt;.
Thus, SSL connection is mapped the way it is done in JavaMail</li>
<li>Few properties, such as password etc., are set to @name with the prefix
"transport"</li>
</ul>
<p>For a non-SSL connection, as an example,mail transport sender can be
activated by adding following entry to the axis2.xml file.</p>
<source><pre> &lt;transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender"&gt;
&lt;parameter name="mail.smtp.host" locked="false"&gt;localhost&lt;/parameter&gt;
&lt;parameter name="mail.smtp.user" locked="false"&gt;mary&lt;/parameter&gt;
&lt;parameter name="transport.mail.smtp.password" locked="false"&gt;mary&lt;/parameter&gt;
&lt;/transportSender&gt;
</pre>
</source>
<p>In runtime tuning a client to set mail transport is as easy as follows,</p>
<source><pre>...
Options options = new Options();
HttpTransportProperties.MailProperties mailProps
= new HttpTransportProperties.MailProperties();
mailProps.addProperty("mail.smtp.host","localhost");
mailProps.addProperty("mail.smtp.user","mary");
mailProps.setPassword("mary");
options.setProperty(HTTPConstants.MAIL_SMTP,mailProps);
...</pre>
</source>Thus, a user familiar with setting up a SSL connection, should
easily do it with the MailProperties object. For Eg.: tuning the sender to
talk to gmail account. This configuration should also be done with
&lt;parameter/&gt; in axis2.xml. <source>
<pre>...
HttpTransportProperties.MailProperties props =
new HttpTransportProperties.MailProperties();
props.put("mail.smtp.user", "address@gmail.com");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.debug", "true"); // if the user wants
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setPassword("password");
...</pre>
</source><a name="receiver"></a>
<h2>Transport Receiver</h2>
<p>For a non-SSL connection, as an example, mail Listener can be activated by
adding the following entry to the axis2.xml file.</p>
<source><pre> &lt;transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener"&gt;
&lt;parameter name="mail.pop3.host" locked="false"&gt;localhost&lt;/parameter&gt;
&lt;parameter name="mail.pop3.user" locked="false"&gt;bob&lt;/parameter&gt;
&lt;parameter name="transport.mail.pop3.password" locked="false"&gt;bob&lt;/parameter&gt;
&lt;parameter name="transport.mail.replyToAddress" locked="false"&gt;bob@localhost&lt;/parameter&gt;
&lt;/transportReceiver&gt;
</pre>
</source>
<p><i>Note:</i> The @name="transport.mail.replyToAddress" is an important
parameter. It supply the Endpoint reference to the listener.</p>
<p>For an advanced user, this can be set to a SSL connection. As an example,
lets use this transport listener to pop from a specified gmail account.</p>
<source><pre>&lt;transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener"&gt;
&lt;parameter name="mail.pop3.host" locked="false"&gt;pop.gmail.com&lt;/parameter&gt;
&lt;parameter name="mail.pop3.user" locked="false"&gt;address@gmail.com&lt;/parameter&gt;
&lt;parameter name="mail.pop3.socketFactory.class" locked="false"&gt;javax.net.ssl.SSLSocketFactory&lt;/parameter&gt;
&lt;parameter name="mail.pop3.socketFactory.fallback" locked="false"&gt;false&lt;/parameter&gt;
&lt;parameter name="mail.pop3.port" locked="false"&gt;995&lt;/parameter&gt;
&lt;parameter name="mail.pop3.socketFactory.port" locked="false"&gt;995&lt;/parameter&gt;
&lt;parameter name="transport.mail.pop3.password" locked="false"&gt;password&lt;/parameter&gt;
&lt;parameter name="transport.mail.replyToAddress" locked="false"&gt;address@gmail.com&lt;/parameter&gt;
&lt;/transportReceiver&gt;</pre>
</source><a name="server"></a>
<h2>Using Mail Transport in the Server Side</h2>
<p>If the Mail Listener is need to be started as a standalone mail listener,
it can be done with following command with the all the Axis2 jars and the
mail dependency jars in the classpath.</p>
<source><pre>java org.apache.axis2.transport.mail.SimpleMailListener repository-directory</pre>
</source><a name="client"></a>
<h2>Using Mail Transport in the Client Side</h2>
<p>The following code segment shows how to send a one-way (IN-Only MEP) SOAP
message using the mail transport, this needs the Transport Sender
configured.</p>
<source><pre>
OMElement payload = ....
String targetEPR = "mail:axis2@localhost/axis2/services/Foo";
ConfigurationContext configurationContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repo,
axis2XML);
ServiceClient servicClient = new ServiceClient(configurationContext, null);
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_MAIL);
servicClient.setOptions(options);
servicClient.sendRobust(payload);</pre>
</source><a name="james"></a>
<h2>Configure James as SMTP and POP Server</h2>
<p>Download the <a href="http://james.apache.org/">Apache James</a> and start
James, connect to the James via Telnet for administrator James with the
following code:</p>
<source><pre>$telnet 127.0.0.1 4555
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
JAMES Remote Administration Tool 2.2.0
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands</pre>
</source>
<p>Add users to James</p>
<source><pre>adduser axis2-server axis2
User axis2-server added
adduser axis2-client axis2
User axis2-client added
Connection closed by foreign host.</pre>
</source>
<p>Now James is up and running with the accounts.</p>
<a name="included"></a>
<h2>Using the Included Mail Server</h2>
<p>The inbuilt mail server can be started from the command line using the
following piece of code when all the necessary jars are in the class path.</p>
<source><pre>java org.apache.axis2.transport.mail.server.MailServer</pre>
</source>
<p>The server itself does not need any configuration or tinkering to work. A
ConfigurationContext and the ports to operate on are the only details needed.
The server will store the mails in memory against the recipient till the
recipient pops it from the server. To facilitate the use in *nix environments
as a non root user the POP and SMTP ports used by default config/test cases
are (1024 + 25) and (1024 + 110).</p>
<hr>
</body>
</html>