based on sendmail logicsheet documentation http://cocoon.apache.org/2.1/userdocs/xsp/sendmail.html, sample created by StavrosKounis

Problem

Send mail web form

Solution

Requirements

download and put these jars in WEB-INF\lib

check your cocoon.xconf for sendmail logic sheet

...
<builtin-logicsheet>
    <parameter name="prefix" value="sendmail"/>
    <parameter name="uri" value="http://apache.org/cocoon/sendmail/1.0"/>
    <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/sendmail.xsl"/>
</builtin-logicsheet>
...

example

create a folder under samples and name it "sendmail" (for example) put in this folser 3 files

  1. sitemap.xmap

2. sendmailform.xhtml 3. sendmail.xsp

sitemap.xmap

<?xml version="1.0"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
    <!-- =========================== Pipelines ================================= -->
    <map:pipelines>
        <map:pipeline>
            <map:match pattern="sendmailform">
                <map:read mime-type="text/html" src="sendmailform.xhtml"/>
            </map:match>
            <map:match pattern="">
                <map:redirect-to uri="sendmailform"/>
            </map:match>
            <map:match pattern="send-a-mail">
                <map:generate src="sendmail.xsp" type="serverpages"/>
                <map:serialize/>
            </map:match>
        </map:pipeline>
    </map:pipelines>
</map:sitemap>

sendmailform.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>send mail</title>
    </head>
    <body>
        <form action="send-a-mail" method="post" enctype="multipart/form-data">
            <table>
                <tbody>
                    <tr>
                        <td>subject:</td>
                        <td><input type="text" name="subject" size="56" /></td>
                    </tr>
                    <tr>
                        <td>body:</td>
                        <td><textarea name="messagebody" rows="5" cols="72"></textarea></td>
                    </tr>
                    <tr>
                        <td>file:</td>
                        <td><input type="file" name="attachment" size="56" /></td>
                    </tr>					
                </tbody>
            </table>
            <br />
            <button type="submit">send . . . </button>
        </form>
    </body>
</html>

sendmail.xsp

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp"
                          xmlns:xsp-request="http://apache.org/xsp/request/2.0"
                          xmlns:sendmail="http://apache.org/cocoon/sendmail/1.0">
  <email>
    <xsp:logic>
      StringBuffer body = new StringBuffer();
      body.append("\n");
      body.append("Web form message:\n\n");
      body.append(<xsp-request:get-parameter name="messagebody"/>);
      body.append("\n\n");
    </xsp:logic>
    <sendmail:send-mail>
        <!-- change sender and recipient appropriately -->
        <sendmail:from>cocoon@apache.org</sendmail:from>
        <sendmail:to>test@127.0.0.1</sendmail:to>
        <sendmail:subject><xsp-request:get-parameter name="subject"/></sendmail:subject>
        <!-- change the IP to point to your send mail server -->
        <sendmail:smtphost>127.0.0.1</sendmail:smtphost>
        <sendmail:body><xsp:expr>body.toString()</xsp:expr></sendmail:body>
        <sendmail:attachment><sendmail:param name="object"><xsp:expr>request.get("attachment")</xsp:expr></sendmail:param></sendmail:attachment>
        <sendmail:on-success>
            <p>Email successfully sent.</p>
        </sendmail:on-success>
        <sendmail:on-error>
            <p style="color:red;">An error occurred: <sendmail:error-message/></p>
        </sendmail:on-error>
    </sendmail:send-mail>
  </email>
</xsp:page>

ask for http://...cocoon.../samples/sendmail/

ONE COMMON PROBLEM

maybe developers patch sendmail logicsheet in a future release

be carefull to NOT leave spaces or tabs in:

    <sendmail:body><xsp:expr>body.toString()</xsp:expr></sendmail:body>

this one will generate errors:

<sendmail:body>
    <xsp:expr>body.toString()</xsp:expr>
</sendmail:body>

the same error will occur in:

<sendmail:attachment><sendmail:param name="object"><xsp:expr>request.get("attachment")</xsp:expr></sendmail:param></sendmail:attachment>

this one will generate errors:

<sendmail:attachment>
  <sendmail:param name="object">
   <xsp:expr>request.get("attachment")</xsp:expr>
  </sendmail:param>
</sendmail:attachment>

This should be fixed in Cocoon 2.1.5, would be nice if someone can confirm it. (JoergHeinicke)

''I have test it in 2.1.6 and it's not fixed here is the error message (StavrosKounis):

Error compiling sendmail_xsp: ERROR 1 (org\apache\cocoon\www\samples\sendmail\sendmail_xsp.java): ... _sendmail_mms.setBody(String.valueOf( "" // start error (lines 174-174) "String literal is not properly closed by a double-quote" + " // end error " + ... Line 174, column 0: String literal is not properly closed by a double-quote

In cocoon 2.1.8 I had to remove geronimo-spec-javamail-1.3.1-rc5.jar and geronimo-spec-activation-1.0.2-rc4.jar from WEB-INF/lib I still had error with attachment.

Attachment: sendmail.zip

  • No labels