jakarta-taglibs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert L. Murphy" <robertmur...@insightbb.com>
Subject Re: Content-ID: and URL based messages for mailer
Date Sat, 23 Oct 2004 01:04:57 GMT
Next I will be adding code to parse the html looking for all the <img> 
tags, where it will read the src attributes, attach the image to the 
email, then replace path info with cid:filename.  Thus, with a single 
<mt:message url="url"/> tag you can email a complete html page including 
images.  I am already doing this with Tomcat, but I haven't finished 
modifying taglibs-mailer completely so as to encapsulate all the code 
necesary for taglibs-mailer to inteligently convert a web page to an 
email.  In addition to adding attachments based on <img> tags and 
modifying the <img> on the fly to work in emails, I will do the same for 
cascading style sheet (*.css) files/links.  I someone likes the idea and 
wants it now, feel free to go ahead and do it, I won't have time for a 
couple of months.

Also:  I did not include the necesary modification to the tld:  copy the 
url block from the attach entry to the message entry.
Robert L. Murphy wrote:

> The two diffs add the folowing:
>
> <mt:message url="http://www.domain.net"/>
>
> <mt:message url="">
>    http://www.domain.net
> </mt:message>
>
> And, when attaching a file, each attachment will have a Content-ID 
> based on the filename.
>
>------------------------------------------------------------------------
>
>Index: AttachTag.java
>===================================================================
>--- AttachTag.java	(revision 1)
>+++ AttachTag.java	(working copy)
>@@ -97,8 +97,13 @@
>         }
>         mbp = new MimeBodyPart();  // create the bodypart for this attachment
>         body = null;
>-        if (type != null || (file != null && file.length() == 0) ||
>-                (url != null && url.length() == 0) ) {
>+        if (
>+            type != null 
>+        || 
>+            (file != null && file.length() == 0) 
>+        ||
>+            (url != null && url.length() == 0) 
>+        ) {
>             return EVAL_BODY_TAG;
>         }
>         return SKIP_BODY;
>@@ -233,10 +238,13 @@
>         try {
>             URL url = new URL(value);
>             mbp.setDataHandler(new DataHandler(url));
>-            if(url.getFile() != null)
>+            if(url.getFile() != null) {
>                 mbp.setFileName(url.getFile());
>-            else
>+                mbp.setContentID(url.getFile());
>+            } else {
>                 mbp.setFileName(value);
>+                mbp.setContentID(value);
>+            }
> 
>         } catch(MalformedURLException e) {
>             throw new JspException("The URL entered as an attachment was " +
>@@ -268,6 +276,7 @@
>                 DataSource attachment = new FileDataSource(file);
>                 mbp.setDataHandler(new DataHandler(attachment));
>                 mbp.setFileName(file.getName());
>+                mbp.setContentID(file.getName());
>             } else {
>                 // if the file does not exist it is probably an error in the way
>                 // the page author is adding the path throw an exception so this
>Index: MessageTag.java
>===================================================================
>--- MessageTag.java	(revision 1)
>+++ MessageTag.java	(working copy)
>@@ -19,6 +19,11 @@
> import javax.servlet.jsp.JspException;
> import javax.servlet.jsp.tagext.BodyContent;
> import javax.servlet.jsp.tagext.BodyTagSupport;
>+import java.net.URL;
>+import javax.mail.internet.MimeBodyPart;
>+import javax.activation.DataHandler;
>+import java.net.MalformedURLException;
>+import javax.mail.MessagingException;
> 
> /**
>  * MessageTag - JSP tag <b>Message</b> is used to set the message in an e-mail.
>@@ -55,11 +60,27 @@
>     private String type = "text";
> 
>     /**
>+     * holds the value of body if the url is to be retrieved from the body of
>+     * tag
>+     */
>+    private String url = null;
>+    
>+    /**
>      * character set to be used (default is unspecified)
>      */
>     private String charset = null;
> 
>     /**
>+     * object in which the attachment is stored within the e-mail message
>+     */
>+    private MimeBodyPart mbp = null;
>+    
>+    /**
>+     * pointer to the parent tag
>+     */
>+    private MailTag myparent = null;
>+    
>+    /**
>      *  implementation of the method from the tag interface that tells the JSP
>      *  page what to do after the body of this tag
>      *
>@@ -71,26 +92,81 @@
>      *
>      */
>     public int doAfterBody() throws JspException {
>+        BodyContent body = getBodyContent();
>+        mbp = new MimeBodyPart();  // create the bodypart for this attachment       

>+        myparent = (MailTag)findAncestorWithClass(this, MailTag.class);
>+        if (url == null) {
>+            // parent tag must be a MailTag, gives access to methods in parent
>+            if (myparent == null) {
>+                throw new JspException("message tag not nested within mail tag");
>+            }
>+            
>+            String message = body.getString();
>+            // Clear the body since we only used it as input for the email address
>+            body.clearBody();
>+            if (message == null) {
>+                throw new JspException("The message tag is empty");
>+            }
>+            myparent.setMessage(message); // set message in the parent tag
>+            myparent.setType(type);  // set the mime type of the message
>+            myparent.setCharset(charset);  // set the character set of the message
>+            
>+        } else if (url.length() == 0 && body != null) {
>+            String s_body = body.getString();
>+            if(s_body != null)
>+                s_body = s_body.trim();
>+            // the url is supposed to come from the body of the tag
>+            if (s_body.length() > 0) {
>+                // prepare the file or url resource to be an attachment
>+                setUrlBodyPart(s_body);
>+            } else {
>+                // body is empty throw error
>+                throw new JspException(
>+                    "The url must be givenin the body of this tag.");
>+            }
>+        } else
>+            // create the attachment with the url in the url attribute
>+            setUrlBodyPart(url);
>+        return SKIP_BODY;
>+    }
> 
>-	// parent tag must be a MailTag, gives access to methods in parent
>-	MailTag myparent = (MailTag)findAncestorWithClass(this, MailTag.class);
>-	if (myparent == null) {
>-	    throw new JspException("message tag not nested within mail tag");
>-        }
>+    /**
>+     * wrap the url named attachment in the approiate datahandler and create a
>+     * mimebodypart to be added to the list of attachments
>+     *
>+     * @param value  string that represents a URL
>+     *
>+     */
>+    protected void setUrlBodyPart(String value) throws JspException {
> 
>-        BodyContent body = getBodyContent();
>-        String message = body.getString();
>-        // Clear the body since we only used it as input for the email address
>-        body.clearBody();
>-        if (message == null) {
>-            throw new JspException("The message tag is empty");
>+// Added by Jayson Falkner - 5/8/2001
>+
>+        try {
>+            URL url = new URL(value);
>+            mbp.setDataHandler(new DataHandler(url));
>+            if(url.getFile() != null) {
>+                mbp.setFileName(url.getFile());
>+                mbp.setContentID(url.getFile());
>+            } else {
>+                mbp.setFileName(value);
>+                mbp.setContentID(value);
>+            }   
>+            myparent.setMessage((String)mbp.getContent()); // set message in the parent
tag
>+            myparent.setType(type);  // set the mime type of the message
>+            myparent.setCharset(charset);  // set the character set of the message
>+        } catch(MalformedURLException e) {
>+            throw new JspException("The URL entered as an attachment was " +
>+                        "incorrectly formatted please check it and try again.");
>+        } catch(MessagingException e) {
>+            throw new JspException("The Resource named by " + url + " could not"
>+                                   + " be used as the message body.");
>+        } catch(java.io.IOException ioe) {
>+            throw new JspException("The Resource named by " + url + " could not"
>+                                   + " be cast to a String.");
>         }
>-	myparent.setMessage(message); // set message in the parent tag
>-	myparent.setType(type);  // set the mime type of the message
>-	myparent.setCharset(charset);  // set the character set of the message
>-	return SKIP_BODY;
>+// End of added
>     }
>-
>+    
>     /**
>      * set the mime type for this email text or html
>      *
>@@ -110,4 +186,15 @@
>     public void setCharset(String value) {
> 	charset = value;
>     }
>+    
>+    /**
>+     * set the resource named by URL into a mimebodypart so that it can be added
>+     * to the list of attachments for this e-mail
>+     *
>+     * @param value  full url including http://, to the resource to be added as
>+     *               an attachment
>+     */
>+    public void setUrl(String value) {
>+        url = value;
>+    }
> }
>  
>
>------------------------------------------------------------------------
>
>Index: AttachTag.java
>===================================================================
>--- AttachTag.java	(revision 1)
>+++ AttachTag.java	(working copy)
>@@ -97,8 +97,13 @@
>         }
>         mbp = new MimeBodyPart();  // create the bodypart for this attachment
>         body = null;
>-        if (type != null || (file != null && file.length() == 0) ||
>-                (url != null && url.length() == 0) ) {
>+        if (
>+            type != null 
>+        || 
>+            (file != null && file.length() == 0) 
>+        ||
>+            (url != null && url.length() == 0) 
>+        ) {
>             return EVAL_BODY_TAG;
>         }
>         return SKIP_BODY;
>@@ -233,10 +238,13 @@
>         try {
>             URL url = new URL(value);
>             mbp.setDataHandler(new DataHandler(url));
>-            if(url.getFile() != null)
>+            if(url.getFile() != null) {
>                 mbp.setFileName(url.getFile());
>-            else
>+                mbp.setContentID(url.getFile());
>+            } else {
>                 mbp.setFileName(value);
>+                mbp.setContentID(value);
>+            }
> 
>         } catch(MalformedURLException e) {
>             throw new JspException("The URL entered as an attachment was " +
>@@ -268,6 +276,7 @@
>                 DataSource attachment = new FileDataSource(file);
>                 mbp.setDataHandler(new DataHandler(attachment));
>                 mbp.setFileName(file.getName());
>+                mbp.setContentID(file.getName());
>             } else {
>                 // if the file does not exist it is probably an error in the way
>                 // the page author is adding the path throw an exception so this
>Index: MessageTag.java
>===================================================================
>--- MessageTag.java	(revision 1)
>+++ MessageTag.java	(working copy)
>@@ -19,6 +19,11 @@
> import javax.servlet.jsp.JspException;
> import javax.servlet.jsp.tagext.BodyContent;
> import javax.servlet.jsp.tagext.BodyTagSupport;
>+import java.net.URL;
>+import javax.mail.internet.MimeBodyPart;
>+import javax.activation.DataHandler;
>+import java.net.MalformedURLException;
>+import javax.mail.MessagingException;
> 
> /**
>  * MessageTag - JSP tag <b>Message</b> is used to set the message in an e-mail.
>@@ -55,11 +60,27 @@
>     private String type = "text";
> 
>     /**
>+     * holds the value of body if the url is to be retrieved from the body of
>+     * tag
>+     */
>+    private String url = null;
>+    
>+    /**
>      * character set to be used (default is unspecified)
>      */
>     private String charset = null;
> 
>     /**
>+     * object in which the attachment is stored within the e-mail message
>+     */
>+    private MimeBodyPart mbp = null;
>+    
>+    /**
>+     * pointer to the parent tag
>+     */
>+    private MailTag myparent = null;
>+    
>+    /**
>      *  implementation of the method from the tag interface that tells the JSP
>      *  page what to do after the body of this tag
>      *
>@@ -71,26 +92,81 @@
>      *
>      */
>     public int doAfterBody() throws JspException {
>+        BodyContent body = getBodyContent();
>+        mbp = new MimeBodyPart();  // create the bodypart for this attachment       

>+        myparent = (MailTag)findAncestorWithClass(this, MailTag.class);
>+        if (url == null) {
>+            // parent tag must be a MailTag, gives access to methods in parent
>+            if (myparent == null) {
>+                throw new JspException("message tag not nested within mail tag");
>+            }
>+            
>+            String message = body.getString();
>+            // Clear the body since we only used it as input for the email address
>+            body.clearBody();
>+            if (message == null) {
>+                throw new JspException("The message tag is empty");
>+            }
>+            myparent.setMessage(message); // set message in the parent tag
>+            myparent.setType(type);  // set the mime type of the message
>+            myparent.setCharset(charset);  // set the character set of the message
>+            
>+        } else if (url.length() == 0 && body != null) {
>+            String s_body = body.getString();
>+            if(s_body != null)
>+                s_body = s_body.trim();
>+            // the url is supposed to come from the body of the tag
>+            if (s_body.length() > 0) {
>+                // prepare the file or url resource to be an attachment
>+                setUrlBodyPart(s_body);
>+            } else {
>+                // body is empty throw error
>+                throw new JspException(
>+                    "The url must be givenin the body of this tag.");
>+            }
>+        } else
>+            // create the attachment with the url in the url attribute
>+            setUrlBodyPart(url);
>+        return SKIP_BODY;
>+    }
> 
>-	// parent tag must be a MailTag, gives access to methods in parent
>-	MailTag myparent = (MailTag)findAncestorWithClass(this, MailTag.class);
>-	if (myparent == null) {
>-	    throw new JspException("message tag not nested within mail tag");
>-        }
>+    /**
>+     * wrap the url named attachment in the approiate datahandler and create a
>+     * mimebodypart to be added to the list of attachments
>+     *
>+     * @param value  string that represents a URL
>+     *
>+     */
>+    protected void setUrlBodyPart(String value) throws JspException {
> 
>-        BodyContent body = getBodyContent();
>-        String message = body.getString();
>-        // Clear the body since we only used it as input for the email address
>-        body.clearBody();
>-        if (message == null) {
>-            throw new JspException("The message tag is empty");
>+// Added by Jayson Falkner - 5/8/2001
>+
>+        try {
>+            URL url = new URL(value);
>+            mbp.setDataHandler(new DataHandler(url));
>+            if(url.getFile() != null) {
>+                mbp.setFileName(url.getFile());
>+                mbp.setContentID(url.getFile());
>+            } else {
>+                mbp.setFileName(value);
>+                mbp.setContentID(value);
>+            }   
>+            myparent.setMessage((String)mbp.getContent()); // set message in the parent
tag
>+            myparent.setType(type);  // set the mime type of the message
>+            myparent.setCharset(charset);  // set the character set of the message
>+        } catch(MalformedURLException e) {
>+            throw new JspException("The URL entered as an attachment was " +
>+                        "incorrectly formatted please check it and try again.");
>+        } catch(MessagingException e) {
>+            throw new JspException("The Resource named by " + url + " could not"
>+                                   + " be used as the message body.");
>+        } catch(java.io.IOException ioe) {
>+            throw new JspException("The Resource named by " + url + " could not"
>+                                   + " be cast to a String.");
>         }
>-	myparent.setMessage(message); // set message in the parent tag
>-	myparent.setType(type);  // set the mime type of the message
>-	myparent.setCharset(charset);  // set the character set of the message
>-	return SKIP_BODY;
>+// End of added
>     }
>-
>+    
>     /**
>      * set the mime type for this email text or html
>      *
>@@ -110,4 +186,15 @@
>     public void setCharset(String value) {
> 	charset = value;
>     }
>+    
>+    /**
>+     * set the resource named by URL into a mimebodypart so that it can be added
>+     * to the list of attachments for this e-mail
>+     *
>+     * @param value  full url including http://, to the resource to be added as
>+     *               an attachment
>+     */
>+    public void setUrl(String value) {
>+        url = value;
>+    }
> }
>
>  
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org


Mime
View raw message