How to use mail transport in ESB to convert the SOAP message to a plain text mail

Archived Content
This article is provided for historical perspective only, and may not reflect current conditions. Please refer to relevant product page for more up-to-date product information and resources.
  • By Heshan Suriyaarachchi
  • 22 Dec, 2009

SCENARIO:
Imagine a scenario where you are using the mail transport in WSO2 ESB. You need to convert the SOAP message to a plain text mail(without any XML in it). This Knowledge Base article is written to address it.

HOW TO:
Following steps will guide you to get your scenario up and running.

1) Download a distribution of the WSO2 ESB [1].
ie. wso2esb-2.1.1.zip

2) Extract the zip file. The folder created (wso2esb-2.1.1) will be referred as ESB_HOME.

3) Uncomment the mail TransportSender and TransportReceiver from axis2.xml
ie. ESB_HOME/conf/axis2.xml

<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
<parameter name="mail.smtp.host">smtp.gmail.com</parameter>
<parameter name="mail.smtp.port">587</parameter>
<parameter name="mail.smtp.starttls.enable">true</parameter>
<parameter name="mail.smtp.auth">true</parameter>
<parameter name="mail.smtp.user">synapse.demo.0</parameter>
<parameter name="mail.smtp.password">mailpassword</parameter>
<parameter name="mail.smtp.from">synapse.demo.0@gmail.com</parameter>
</transportSender>
<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.MailTransportListener">
</transportReceiver>

4) Add the following line to axis2.xml's MessageFormatters.

<messageFormatter contentType="text/plain" class="org.apache.axis2.format.PlainTextFormatter"/>

5) Build the SimpleStockQuote service (which is residing inside the samples).
ie. ESB_HOME/samples/axis2Server/src/SimpleStockQuoteService

6) Run sample axis2Server.

7) Go to the ESB_HOME/bin and run the script which starts wso2server.
eg. wso2server.bat for windows environments
      wso2server.sh for linux environments

8) Then the server will be started. You can access the management console using the following URL [2].

9) Log into the Mangement Console using following credentials.
      username: admin
      password: admin

10) Create a proxy service using the following proxy configuration.

<!-- Using the mail transport -->
<definitions xmlns="https://ws.apache.org/ns/synapse">
<proxy name="StockQuoteProxy" transports="mailto">

    <parameter name="transport.mail.Address">synapse.demo.1@gmail.com</parameter>
    <parameter name="transport.mail.Protocol">pop3</parameter>
    <parameter name="transport.PollInterval">5</parameter>
    <parameter name="mail.pop3.host">pop.gmail.com</parameter>
    <parameter name="mail.pop3.port">995</parameter>
    <parameter name="mail.pop3.user">synapse.demo.1</parameter>
    <parameter name="mail.pop3.password">mailpassword</parameter>
    <parameter name="mail.pop3.socketFactory.class">javax.net.ssl.SSLSocketFactory</parameter>
    <parameter name="mail.pop3.socketFactory.fallback">false</parameter>
    <parameter name="mail.pop3.socketFactory.port">995</parameter>
    <parameter name="transport.mail.ContentType">application/xml</parameter>

    <target>
        <inSequence>
            <property name="senderAddress" expression="get-property('transport', 'From')"/>
            <log level="full">
                <property name="Sender Address" expression="get-property('senderAddress')"/>
            </log>
            <send>
                <endpoint>
                    <address uri="https://localhost:9000/services/SimpleStockQuoteService"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <property name="Subject" value="Custom Subject for Response" scope="transport"/>
      <property name="messageType" value="text/plain" scope="axis2-client"/>
    <script language="js"><![CDATA[
              mc.setPayloadXML(<ns:text xmlns:ns="https://ws.apache.org/commons/ns/payload">Plain text received!</ns:text>);
       ]]></script>
            <header name="To" expression="fn:concat('mailto:', get-property('senderAddress'))"/>
            <log level="full">
                <property name="message" value="Response message"/>
                <property name="Sender Address" expression="get-property('senderAddress')"/>
            </log>
            <send/>
        </outSequence>
    </target>
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
</proxy>
</definitions>

11) Send an email to synapse.demo.1@gmail.com.

12) You will receive the response in plain text.

Additional Help

ESB documentation - https://wso2.org/project/esb/java/2.1.1/docs/index.html

ESB features - https://wso2.org/projects/esb/java/features

Mailing lists - https://wso2.org/mail

Library - https://wso2.org/library/esb

References

[1] - https://wso2.org/downloads/esb

[2] - https://<host>:<port>/carbon/

Author

Heshan Suriyaarachchi, Software Engineer, WSO2 Inc. heshan at wso2 dot com

Blog: https://heshans.blogspot.com/