cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Geissler" <M.Geiss...@wika.de>
Subject Antw: Mail-transformer
Date Thu, 23 Jan 2003 06:22:49 GMT
Hello, 
I have used the sample of the cocoon Book Cocoon: Building XML
Applications

1. You need to write a own Mail Transformer place the class under
web-inf/classes

You can change the Package and the NAMESPACE to something you like
more

package com.business.cocoon.transformation;

//import org.apache.avalon.excalibur.pool.Poolable;
import org.apache.avalon.framework.parameters.Parameterizable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.transformation.AbstractTransformer;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.*;

public class SendMailTransformer
extends AbstractTransformer
implements Parameterizable {

    public static final String NAMESPACE =
"http://com/business/cocoon/sendmail";
    public static final String SENDMAIL_ELEMENT = "sendmail";
    public static final String MAILTO_ELEMENT = "mailto";
    public static final String MAILSUBJECT_ELEMENT = "mailsubject";
    public static final String MAILBODY_ELEMENT = "mailbody";

    protected static final int MODE_NONE = 0;
    protected static final int MODE_TO = 1;
    protected static final int MODE_SUBJECT = 2;
    protected static final int MODE_BODY = 3;

    protected int mode;
    protected StringBuffer toAddress;
    protected StringBuffer subject;
    protected StringBuffer body;

    protected String mailHost;
    protected String fromAddress;

    /**
     * Parameterizable
     */
    public void parameterize(Parameters parameters)
    throws ParameterException {
        this.mailHost = parameters.getParameter("mailhost");
        this.fromAddress = parameters.getParameter("from");
   
        if (this.getLogger().isDebugEnabled() == true) 
        {
            this.getLogger().debug("Parameters=" + mailHost + ":
"+fromAddress);
        }        
    }

    /**
     * Setup
     */
    public void setup(SourceResolver resolver,
                      Map            objectModel,
                      String         src,
                      Parameters     par)
    throws ProcessingException, SAXException, IOException {
        this.mode = MODE_NONE;
        this.toAddress = new StringBuffer();
        this.subject = new StringBuffer();
        this.body = new StringBuffer();
    }

    public void startElement(String uri, String name, String raw,
                             Attributes attr)
    throws SAXException {
        if (this.getLogger().isDebugEnabled() == true) {
            this.getLogger().debug("BEGIN startElement uri=" + uri +
               ", name=" + name + ", raw=" + raw + ", attr=" + attr);
        }

        if (uri != null && uri.equals(NAMESPACE) ) {
            if (name.equals(SENDMAIL_ELEMENT) == true) {
                // No need to do anything here
            } else if (name.equals(MAILTO_ELEMENT) == true) {
                this.mode = MODE_TO;
            } else if (name.equals(MAILSUBJECT_ELEMENT) == true) {
                this.mode = MODE_SUBJECT;
            } else if (name.equals(MAILBODY_ELEMENT) == true) {
                this.mode = MODE_BODY;
            } else {
                throw new SAXException("Unknown element " + name);
            }
        } else {
            // Not for us
            super.startElement(uri, name, raw, attr);
        }

        if (this.getLogger().isDebugEnabled() == true) {
            this.getLogger().debug("END startElement");
        }
    }

    public void endElement(String uri, String name, String raw)
    throws SAXException {
        if (this.getLogger().isDebugEnabled() == true) {
            this.getLogger().debug("BEGIN endTransformingElement uri="
+ uri +
                              ", name=" + name + ", raw=" + raw);
        }

        if (uri != null && uri.equals(NAMESPACE) ) {
            if (name.equals(SENDMAIL_ELEMENT) == true) {
                if (this.getLogger().isInfoEnabled() == true) {
                    this.getLogger().info("Mail contents: To: "+
this.toAddress +
                                     ", Subject: " + this.subject +
                                     ", Body: "+ this.body);
                }

                String text;
                try {
                    Properties props = new Properties();
                    props.put("mail.smtp.host", this.mailHost);
                    Session mailSession = Session.getInstance(props,
null);

                    MimeMessage pm = new MimeMessage(mailSession);

                    // set from
                    pm.setFrom(new InternetAddress( this.fromAddress
));
                    // set to
                    pm.setRecipients(Message.RecipientType.TO,
                                     InternetAddress.parse(
this.toAddress.toString() ));
                    // set subject
                    pm.setSubject( this.subject.toString() );
                    // set date
                    pm.setSentDate(new Date());
                    // set content
                    pm.setText( this.body.toString() );
                    // send mail
                    Transport trans =
mailSession.getTransport("smtp");
                    Transport.send(pm);
                    // success message
                    text = "Sending mail to " + this.toAddress + " was
successful.";
                } catch (Exception any) {
                    this.getLogger().error("Exception during sending of
mail", any);
                    // failure message
                    text = "Sending mail to " + this.toAddress + "
failed!";
                }
                // create SAX events for success/failure
                super.startElement(NAMESPACE, "sendmail", "sendmail",
new AttributesImpl());
                super.characters(text.toCharArray(), 0,
text.length());
                super.endElement(NAMESPACE, "sendmail", "sendmail");

            } else if (name.equals(MAILTO_ELEMENT) == true) {
                // mailto received
                this.mode = MODE_NONE;
            } else if (name.equals(MAILSUBJECT_ELEMENT) == true) {
                this.mode = MODE_NONE;
            } else if (name.equals(MAILBODY_ELEMENT) == true) {
                this.mode = MODE_NONE;
            } else {
                throw new SAXException("Unknown element " + name);
            }
        } else {
            // Not for us
            super.endElement(uri, name, raw);
        }

        if (this.getLogger().isDebugEnabled() == true) {
            this.getLogger().debug("END endElement");
        }
    }

    public void characters(char[] buffer, int start, int length)
    throws SAXException {
        switch (this.mode) {
            case MODE_NONE : super.characters(buffer, start, length);
                             break;
            case MODE_TO : this.toAddress.append(buffer, start,
length);
                           break;
            case MODE_SUBJECT : this.subject.append(buffer, start,
length);
                           break;
            case MODE_BODY : this.body.append(buffer, start, length);
                           break;
        }
    }
}

2. you must place a File Named myroles.xconf in your WEB-inf directory
<?xml version="1.0" encoding="UTF-8"?>
<role-list>
  <role name="com.business.cocoon.component.mail.MailComponent" 
shorthand="mail" 
default-class="com.business.cocoon.component.mail.MailComponentImpl"
/>
</role-list>


3. you need the packages mail.jar and activation.jar from Sun

4.
you must configer the transformer in cocoon.xconf
<!-- ===================== General Components
=========================== -->
   
   
   <mail>
    <parameter name="mailhost" value="smtp.intra.business.com" />
    <parameter name="from" value="server@business.com" />
   </mail>

5. example mail.xml (this one will bet transformed)
<?xml version="1.0"?>
<document xmlns:mail="http://com/business/cocoon/sendmail">
  <mail:sendmail>
    <mail:mailto>user@business.com</mail:mailto>
    <mail:mailsubject>test von cocoon</mail:mailsubject>
    <mail:mailbody>Testemail</mail:mailbody>
  </mail:sendmail>
</document>


in the sitemap:
1. configure the transformer 

    <map:transformer logger="sitemap.transformer.mail" name="mail"
src="com.business.cocoon.transformation.SendMailTransformer">
     <parameter name="mailhost" value="mail.intra.business.com" />
     <parameter name="from" value="server@business.com" />
    </map:transformer>

2. create a pipline:

      <map:match pattern="mailtest.xml">
  	        <map:generate src="mail.xml"/>
  	        <map:transform type="mail"/>
                 <map:serialize />
      </map:match>  

For further explanation read the mentioned book.

HtH

Martin
>>> Maxime.Gheysen@swisscom.com Mittwoch, 22. Januar 2003 11:41:58 >>>
Hello,

I'm looking for a simple sample page to send a mail.

Thank you,
Maxime

---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>


Mime
View raw message