Java Mailing List Archive

http://www.ant-tasks.com/

Apache Ant Archive

» Ant Users List
» Ant Developers List
Mail a nice pretty html build log...

Mail a nice pretty html build log...

2005-06-15       - By Ivan Ivanov
Reply:     1     2     3     4     5     6  

--- Srikrishna_Parthasarathy@(protected) wrote:

>
> Hello
>
> Kindly post this information to the group.
>
> Thanks
> srikrishna


Hello,

Below you will find MailAttachLogger.java. Here are
instruction how to test it:
0) Compile and jar MailAttachLogger.java
1) Copy the jar to ${user.home}/.ant/lib
2) Download Java Mail and copy mail.jar to
${user.home}/.ant/lib
3) Download Java Activation Framework and copy
avtivation.jar to ${user.home}/.ant/lib
2) and 3) are well described in Library Dependencies
Section in Ant manual.

4) Create an Ant build script:
<!-- mail.xml -->
<project name="mail.logger" default="test-success">

   <target name="-init">
       <loadproperties
srcfile="MailLogger.properties"/>
       <echoproperties prefix="MailLogger"/>
   </target>
 
   <target name="test-success" depends="-init">
       <echo file="${basedir}/success.log">Build
Successful</echo>
   </target>

   <target name="test-failure" depends="-init">
       <echo file="${basedit}/failure.log">Build will
fail</echo>
       <fail message="Deliberate failure"/>
   </target>
</project>

5) The above build script loads the following
properties file. Fill its values with real ones.

# MailLogger.properties
MailLogger.mailhost=smtp.myorg.com
MailLogger.user=myname
MailLogger.password=mypass
MailLogger.from=myfrom@(protected)
MailLogger.replyto=myreplyto@(protected)
MailLogger.failure.notify=true
MailLogger.success.notify=true
MailLogger.failure.to=myto@(protected)
MailLogger.success.to=myto@(protected)
MailLogger.failure.subject=Build failed
MailLogger.success.subject=Build succeeded
MailLogger.success.attachments=success.log
MailLogger.failure.attachments=failure.log

6) After we have adjusted the values in the above
properties file we can test it with the following two
commands:
ant -logger
bg.unisofia.antutils.listeners.MailAttachLogger -f
mail.xml
and

ant -logger
bg.unisofia.antutils.listeners.MailAttachLogger
test-failure -f mail.xml

7) Here is MailAttachLogger:
package bg.unisofia.antutils.listeners;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.Vector;

import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import
org.apache.tools.ant.taskdefs.email.EmailAddress;
import org.apache.tools.ant.taskdefs.email.Mailer;
import org.apache.tools.ant.taskdefs.email.Message;
import org.apache.tools.ant.util.DateUtils;
import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.mail.MailMessage;

public class MailAttachLogger extends DefaultLogger {
   /** Buffer in which the message is constructed
prior to sending */
   private StringBuffer buffer = new StringBuffer();

   /**
    *  Sends an e-mail with the log results.
    *
    * @(protected) event the build finished event
    */
   public void buildFinished(BuildEvent event) {
       super.buildFinished(event);

       Project project = event.getProject();
       Hashtable properties =
project.getProperties();

       // overlay specified properties file (if any),
which overrides project
       // settings
       Properties fileProperties = new Properties();
       String filename = (String)
properties.get("MailLogger.properties.file");
       if (filename != null) {
           InputStream is = null;
           try {
               is = new FileInputStream(filename);
               fileProperties.load(is);
           } catch (IOException ioe) {
               // ignore because properties file is
not required
           } finally {
               if (is != null) {
                   try {
                       is.close();
                   } catch (IOException e) {
                       // ignore
                   }
               }
           }
       }

       for (Enumeration e = fileProperties.keys();
e.hasMoreElements();) {
           String key = (String) e.nextElement();
           String value =
fileProperties.getProperty(key);
           properties.put(key,
project.replaceProperties(value));
       }

       boolean success = (event.getException() ==
null);
       String prefix = success ? "success" :
"failure";

       try {
           boolean notify =
Project.toBoolean(getValue(properties,
                   prefix + ".notify", "on"));

           if (!notify) {
               return;
           }

           String mailhost = getValue(properties,
"mailhost", "localhost");
           int port =
Integer.parseInt(getValue(properties, "port",
                                     
String.valueOf(MailMessage.DEFAULT_PORT)));
           String user = getValue(properties, "user",
"");
           String password = getValue(properties,
"password", "");
           boolean ssl =
Project.toBoolean(getValue(properties,
                    "ssl", "off"));
           String from = getValue(properties, "from",
null);
           String replytoList = getValue(properties,
"replyto", "");
           String toList = getValue(properties,
prefix + ".to", null);
           String subject = getValue(properties,
prefix + ".subject",
                   (success) ? "Build Success" :
"Build Failure");
           String attachmentsList =
getValue(properties, prefix + ".attachments", "");
           project.log("raw attachments are " +
attachmentsList, Project.MSG_VERBOSE);
           Vector attachments =
vectorizeAttachments(project, attachmentsList);
           project.log("resolved attachments' names
are " + attachments, Project.MSG_VERBOSE);
           if (user.equals("") && password.equals("")
&& !ssl && attachments.size() == 0 ) {
               sendMail(mailhost, port,  from,
replytoList, toList,
                        subject,
buffer.substring(0));
           } else {
               sendMimeMail(event.getProject(),
mailhost, port, user,
                            password, ssl, from,
replytoList, toList,
                            subject,
buffer.substring(0), attachments);
           }
       } catch (Exception e) {
           System.out.println("MailLogger failed to
send e-mail!");
           e.printStackTrace(System.err);
       }
   }


   /**
    *  Receives and buffers log messages.
    *
    * @(protected) message the message being logger
    */
   protected void log(String message) {
     
buffer.append(message).append(StringUtils.LINE_SEP);
   }


   /**
    *  Gets the value of a property.
    *
    * @(protected)  properties     Properties to obtain
value from
    * @(protected)  name           suffix of property name.
"MailLogger." will be
    *      prepended internally.
    * @(protected)  defaultValue   value returned if not
present in the properties.
    *      Set to null to make required.
    * @(protected)                The value of the
property, or default value.
    * @(protected)  Exception  thrown if no default
value is specified and the
    *      property is not present in properties.
    */
   private String getValue(Hashtable properties,
String name,
                           String defaultValue)
throws Exception {
       String propertyName = "MailLogger." + name;
       String value = (String)
properties.get(propertyName);

       if (value == null) {
           value = defaultValue;
       }

       if (value == null) {
           throw new Exception("Missing required
parameter: " + propertyName);
       }

       return value;
   }


   /**
    *  Send the mail
    * @(protected)  mailhost         mail server
    * @(protected)  port             mail server port
number
    * @(protected)  from             from address
    * @(protected)  replyToList      comma-separated
replyto list
    * @(protected)  toList           comma-separated
recipient list
    * @(protected)  subject          mail subject
    * @(protected)  message          mail body
    * @(protected)  IOException  thrown if sending
message fails
    */
   private void sendMail(String mailhost, int port,
String from, String replyToList, String toList,
                         String subject, String
message) throws IOException {
       MailMessage mailMessage = new
MailMessage(mailhost, port);
       mailMessage.setHeader("Date",
DateUtils.getDateForHeader());

       mailMessage.from(from);
       if (!replyToList.equals("")) {
           StringTokenizer t = new
StringTokenizer(replyToList, ", ", false);
           while (t.hasMoreTokens()) {
               mailMessage.replyto(t.nextToken());
           }
       }
       StringTokenizer t = new
StringTokenizer(toList, ", ", false);
       while (t.hasMoreTokens()) {
           mailMessage.to(t.nextToken());
       }

       mailMessage.setSubject(subject);

       PrintStream ps = mailMessage.getPrintStream();
       ps.println(message);

       mailMessage.sendAndClose();
   }
   /**
    *  Send the mail  (MimeMail)
    * @(protected)  project          current ant project
    * @(protected)  host             mail server
    * @(protected)  port             mail server port
number
    * @(protected)  user             user name for SMTP
auth
    * @(protected)  password         password for SMTP auth
    * @(protected)  ssl              if true send message
over SSL
    * @(protected)  from             from address
    * @(protected)  replyToString    comma-separated
replyto list
    * @(protected)  toString         comma-separated
recipient list
    * @(protected)  subject          mail subject
    * @(protected)  message          mail body
    * @(protected)  attachments      vector of Files to be
attached
    */
   private void sendMimeMail(Project project, String
host, int port,
                             String user, String
password, boolean ssl,
                             String from, String
replyToString,
                             String toString, String
subject,
                             String message, Vector
attachments)  {
       // convert the replyTo string into a vector of
emailaddresses
       Mailer mailer = null;
           try {
               mailer =
                   (Mailer)
Class.forName("org.apache.tools.ant.taskdefs.email.MimeMailer")
                   .newInstance();
           } catch (Throwable e) {
               log("Failed to initialise MIME mail: "
+ e.getMessage());
               return;
           }
       Vector replyToList =
vectorizeEmailAddresses(replyToString);
       mailer.setHost(host);
       mailer.setPort(port);
       mailer.setUser(user);
       mailer.setPassword(password);
       mailer.setSSL(ssl);
       Message mymessage = new Message(message);
       mymessage.setProject(project);
       mailer.setMessage(mymessage);
       mailer.setFrom(new EmailAddress(from));
       mailer.setReplyToList(replyToList);
       Vector toList =
vectorizeEmailAddresses(toString);
       mailer.setToList(toList);
       mailer.setCcList(new Vector());
       mailer.setBccList(new Vector());
       mailer.setFiles(attachments);
       mailer.setSubject(subject);
       mailer.send();
   }
   
   private Vector vectorizeEmailAddresses(String
listString) {
       Vector emailList = new Vector();
       StringTokenizer tokens = new
StringTokenizer(listString, ",");
       while (tokens.hasMoreTokens()) {
           emailList.addElement(new
EmailAddress(tokens.nextToken()));
       }
       return emailList;
   }
   
   private Vector vectorizeAttachments(Project
project, String attachmentsList) {
       Vector v = new Vector();
       StringTokenizer tokens = new
StringTokenizer(attachmentsList, ",");
       while (tokens.hasMoreTokens()) {
           String filename =
project.replaceProperties(tokens.nextToken());
           File file = project.resolveFile(filename);
           if (file.exists() && file.canRead()) {
               v.add(file);
           }
       }
       return v;
   }
}


Regards
Ivan


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@(protected)
For additional commands, e-mail: user-help@(protected)


©2008 ant-tasks.com - Jax Systems, LLC, U.S.A.