catlett     01/05/21 11:20:55

  Modified:    mailer/src/org/apache/taglibs/mailer SendTag.java
  Log:
  support for mail attachments added
  
  Revision  Changes    Path
  1.3       +233 -151  
jakarta-taglibs/mailer/src/org/apache/taglibs/mailer/SendTag.java
  
  Index: SendTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-taglibs/mailer/src/org/apache/taglibs/mailer/SendTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SendTag.java      2001/04/11 20:56:41     1.2
  +++ SendTag.java      2001/05/21 18:20:50     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-taglibs/mailer/src/org/apache/taglibs/mailer/SendTag.java,v 1.2 
2001/04/11 20:56:41 catlett Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/04/11 20:56:41 $
  + * $Header: 
/home/cvs/jakarta-taglibs/mailer/src/org/apache/taglibs/mailer/SendTag.java,v 1.3 
2001/05/21 18:20:50 catlett Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/05/21 18:20:50 $
    *
    * ====================================================================
    *
  @@ -67,6 +67,7 @@
   import javax.servlet.jsp.tagext.*;
   import javax.mail.*;
   import javax.mail.internet.*;
  +import javax.activation.DataHandler;
   
   /**
    * SendTag - JSP tag <b>Send</b> is used to send the created email.
  @@ -103,6 +104,11 @@
   
        int i = 0;  // counter for list of extra header name/value pairs
        MimeMessage message;  // message object that contains this message
  +// Added by Jayson Falkner - 5/8/2001 --------------------------
  +     MimeMultipart multipart; // multipart for this message
  +// End of added.
  +     ArrayList bodyparts;  // the list of attachments
  +     ListIterator iterate;  // iterator for the list of attachments
        String to = null;  // the to address for this e-mail message
        String cc = null;  // the cc address for this e-mail message
        String bcc = null;  // the bcc address for this e-mail message
  @@ -116,205 +122,281 @@
        // get message from parent tag
        message = myparent.getMessage();
   
  -     try {
  -         // get the list of name and values for the headers to be added
  -         ArrayList name = myparent.getHeaderName();
  -         ArrayList value = myparent.getHeaderValue();
  +     // get the list of name and values for the headers to be added
  +     ArrayList name = myparent.getHeaderName();
  +     ArrayList value = myparent.getHeaderValue();
   
  -         try {
  -             // set extra headers if any
  -             if (name.size() > 0)
  -                 for (i = 0; i < name.size(); i++)
  -                     message.setHeader((String)name.get(i),
  -                                       (String)value.get(i));
  -         } catch (MessagingException me) {
  -             throw new JspException("Header " + name.get(i).toString()
  +     try {
  +         // set extra headers if any
  +         if (name.size() > 0)
  +             for (i = 0; i < name.size(); i++)
  +                 message.setHeader((String)name.get(i),
  +                                            (String)value.get(i));
  +     } catch (MessagingException me) {
  +         throw new JspException("Header " + name.get(i).toString()
                          + " was not able to be set");
  -         }
  +     }
   
  -         // get the to address(es)
  -         if((to = myparent.getTo()) != null) {
  +     // get the to address(es)
  +     if ((to = myparent.getTo()) != null) {
   
  -             // due to the way address are added if addTo is used a ','
  -             // could be in the first position strip it
  -             if (to.indexOf(',') == 0)
  -                 to = to.substring(1);
  -
  -             try {
  -                 // set the to address for this message
  -                 // catch any errors in the format of the addresses
  -                 message.setRecipients(Message.RecipientType.TO, 
  +         // due to the way address are added if addTo is used a ','
  +         // could be in the first position strip it
  +         if (to.indexOf(',') == 0)
  +             to = to.substring(1);
  +
  +         try {
  +             // set the to address for this message
  +             // catch any errors in the format of the addresses
  +             message.setRecipients(Message.RecipientType.TO, 
                                      InternetAddress.parse(to));
  -             } catch (AddressException ae) {
  -                 // get the address that the error occured with
  -                 String ref = ae.getRef();
  -
  -                 // check for more than one address
  -                 if (ref.indexOf(',') != -1) {
  -                     // position of the start of the error inducing address
  -                     int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  -                     // extract the error inducing address
  -                     ref = ref.substring(pos, ref.indexOf(','));
  -                 }
  -
  -                 // check for existence of error if it does not exist create it
  -                 if (error == null)
  -                     error = new ArrayList();
  +         } catch (AddressException ae) {
  +             // get the address that the error occured with
  +             String ref = ae.getRef();
  +
  +             // check for more than one address
  +             if (ref.indexOf(',') != -1) {
  +                 // position of the start of the error inducing address
  +                 int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  +                 // extract the error inducing address
  +                 ref = ref.substring(pos, ref.indexOf(','));
  +             }
   
  -                 String errorinput = "The to address " + ref + " is not in"
  -                           + " the proper format.";
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
   
  -                 error.add(errorinput);
  -             }
  -         } else {
  -             // if no to address has been given through an error
  -             String errorinput = "A to address must be supplied.";
  +             String errorinput = "The to address " + ref + " is not in"
  +                           + " the proper format.";
   
                error.add(errorinput);
  -         }
  +         } catch (MessagingException me) {
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
   
  -         // set the Reply-to address if it hax been supplied
  -         if (myparent.getReplyTo() != null) {
  +             // exception occurs when any of the addresses cannot be
  +             // properly set in the message
  +                String errorinput = "Messaging Exception: To address/es could"
  +                           + " not be set in the message." + me.getMessage();
   
  -             try {
  -                 message.setReplyTo(
  -                        InternetAddress.parse(myparent.getReplyTo()));
  -             } catch (AddressException ae) {
  -                 // check for existence of error if it does not exist create it
  -                 if (error == null)
  -                     error = new ArrayList();
  +             error.add(errorinput);
  +         }
  +     } else {
  +         // if no to address has been given through an error
  +         String errorinput = "A to address must be supplied.";
   
  -                 // exception occurs when the cc address cannot be parsed
  -                 String errorinput = "The Reply-To address was incorrectly set";
  +         error.add(errorinput);
  +     }
   
  -                 error.add(errorinput);
  -             }
  -         }
  +     // set the Reply-to address if it hax been supplied
  +     if (myparent.getReplyTo() != null) {
   
            try {
  +             message.setReplyTo(InternetAddress.parse(myparent.getReplyTo()));
  +         } catch (AddressException ae) {
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
   
  -             // get from address from the parent tag
  -             String from = myparent.getFrom();
  +             // exception occurs when the cc address cannot be parsed
  +             String errorinput = "The Reply-To address was incorrectly set";
   
  -             // set from address for this message
  -             // check for user entered from address
  -             if ((from == null) || (from.length() < 2)) {
  -
  -                 if (myparent.getSessionObj().getProperty("from") != null)
  -                 // check to see if from is set at the level of the Session obj
  -                     message.setFrom(new InternetAddress(
  -                        myparent.getSessionObj().getProperty("from")));
  -             }
  -             else
  -                 message.setFrom(new InternetAddress(from)); 
  -
  +             error.add(errorinput);
            } catch (MessagingException me) {
                // check for existence of error if it does not exist create it
                if (error == null)
                    error = new ArrayList();
   
  -             // add exception to the list of errors in the e-mail
  -             String errorinput = "The from address was not set or is not in"
  -                 + " the proper format for an email address.";
  +             // exception occurs when any of the addresses cannot be
  +             // properly set in the message
  +                String errorinput = "Messaging Exception: Reply-To address/es"
  +                     + " could not be set in the message." + me.getMessage();
   
                error.add(errorinput);
            }
  +     }
  +
  +     try {
  +
  +         // get from address from the parent tag
  +         String from = myparent.getFrom();
  +
  +         // set from address for this message
  +         // check for user entered from address
  +         if ((from == null) || (from.length() < 2)) {
  +
  +             // check to see if from is set at the level of the Session
  +             if (myparent.getSessionObj().getProperty("mail.from") != null)
  +
  +                 message.setFrom(new InternetAddress(
  +                        myparent.getSessionObj().getProperty("mail.from")));
  +         }
  +         else
  +             message.setFrom(new InternetAddress(from));
   
  -         // check for and set cc addresses
  -         if ((cc = myparent.getCc()) != null) {
  +     } catch (MessagingException me) {
  +         // check for existence of error if it does not exist create it
  +         if (error == null)
  +             error = new ArrayList();
   
  -             // due to the way address are added if addCc is used a
  -             // ',' could be in the first position strip it
  -             if (cc.indexOf(',') == 0)
  -                 cc = cc.substring(1);
  +         // add exception to the list of errors in the e-mail
  +         String errorinput = "The from address was not set or is not in"
  +                 + " the proper format for an email address.";
   
  -             try {
  -                    message.setRecipients(Message.RecipientType.CC, 
  +         error.add(errorinput);
  +     }
  +
  +     // check for and set cc addresses
  +     if ((cc = myparent.getCc()) != null) {
  +
  +         // due to the way address are added if addCc is used a
  +         // ',' could be in the first position strip it
  +         if (cc.indexOf(',') == 0)
  +             cc = cc.substring(1);
  +
  +         try {
  +                message.setRecipients(Message.RecipientType.CC, 
                                           InternetAddress.parse(cc));
  -             } catch (AddressException ae) {
  -                 // get the address that the error occured with
  -                 String ref = ae.getRef();
  -
  -                 // check for more than one address
  -                 if (ref.indexOf(',') != -1) {
  -                     // position of the start of the error inducing address
  -                     int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  -                     // extract the error inducing address
  -                     ref = ref.substring(pos, ref.indexOf(','));
  -                 }
  -
  -                 // check for existence of error if it does not exist create it
  -                 if (error == null)
  -                     error = new ArrayList();
  +         } catch (AddressException ae) {
  +             // get the address that the error occured with
  +             String ref = ae.getRef();
  +
  +             // check for more than one address
  +             if (ref.indexOf(',') != -1) {
  +                 // position of the start of the error inducing address
  +                 int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  +                 // extract the error inducing address
  +                 ref = ref.substring(pos, ref.indexOf(','));
  +             }
   
  -                 // exception occurs when the to address cannot be parsed
  -                 String errorinput = "The cc address " + ref + " is not in"
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
  +
  +             // exception occurs when the to address cannot be parsed
  +             String errorinput = "The cc address " + ref + " is not in"
                              + " the proper format.";
   
  -                 error.add(errorinput);
  -             }
  -            }
  +             error.add(errorinput);
  +         } catch (MessagingException me) {
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
   
  -         // check for and set bcc addresses
  -            if ((bcc = myparent.getBcc()) != null) {
  +             // exception occurs when any of the addresses cannot be
  +             // properly set in the message
  +                String errorinput = "Messaging Exception: Some cc address/es"
  +                                     + " could not be set in the message." 
  +                                     + me.getMessage();
   
  -             // due to the way address are added if addBcc is used a
  -             // ',' could be in the first position strip it
  -             if (bcc.indexOf(',') == 0)
  -                 bcc = bcc.substring(1);
  +             error.add(errorinput);
  +         }
  +     }
   
  -             try {
  -                    message.setRecipients(Message.RecipientType.BCC, 
  +     // check for and set bcc addresses
  +     if ((bcc = myparent.getBcc()) != null) {
  +
  +         // due to the way address are added if addBcc is used a
  +         // ',' could be in the first position strip it
  +         if (bcc.indexOf(',') == 0)
  +             bcc = bcc.substring(1);
  +
  +         try {
  +                message.setRecipients(Message.RecipientType.BCC, 
                                          InternetAddress.parse(bcc));
  -             } catch (AddressException ae) {
  -                 // get the address that the error occured with
  -                 String ref = ae.getRef();
  -
  -                 // check for more than one address
  -                 if (ref.indexOf(',') != -1) {
  -                     // position of the start of the error inducing address
  -                     int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  -                     // extract the error inducing address
  -                     ref = ref.substring(pos, ref.indexOf(','));
  -                 }
  -
  -                 // check for existence of error if it does not exist create it
  -                 if (error == null)
  -                     error = new ArrayList();
  +         } catch (AddressException ae) {
  +             // get the address that the error occured with
  +             String ref = ae.getRef();
  +
  +             // check for more than one address
  +             if (ref.indexOf(',') != -1) {
  +                 // position of the start of the error inducing address
  +                 int pos = ref.substring(0, ae.getPos()).indexOf(',') + 1;
  +                 // extract the error inducing address
  +                 ref = ref.substring(pos, ref.indexOf(','));
  +             }
   
  -                 // exception occurs when the to address cannot be parsed
  -                 String errorinput = "The bcc address " + ref + " is not in"
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
  +
  +             // exception occurs when the to address cannot be parsed
  +             String errorinput = "The bcc address " + ref + " is not in"
                              + " the proper format.";
   
  -                 error.add(errorinput);
  -             }
  -            }
  +             error.add(errorinput);
  +         } catch (MessagingException me) {
  +             // check for existence of error if it does not exist create it
  +             if (error == null)
  +                 error = new ArrayList();
  +
  +             // exception occurs when any of the addresses cannot be
  +             // properly set in the message
  +                String errorinput = "Messaging Exception: Some bcc address/es"
  +                                     + " could not be set in the message." 
  +                                     + me.getMessage();
   
  +             error.add(errorinput);
  +         }
  +     }
  +
  +     try {
            // set the subject in the message
            message.setSubject(myparent.getSubject());
   
            // add the sent date time to the message
            message.setSentDate(new Date());
  +     } catch (MessagingException me) {
  +         // error occured while adding one of the above to the message
  +     }
   
  -         // set the message with a mimetype according to type set by user
  -            if (myparent.getType().equalsIgnoreCase("html"))
  -                message.setContent(myparent.getBody(), "text/html");
  -            else 
  -                message.setContent(myparent.getBody(), "text/plain");
  +     // check if there are attachments
  +     if (myparent.getAttachments()) {
  +         // create a multipart object and set the message as the first
  +         // part then add the attachments
  +         multipart = new MimeMultipart();
   
  -     } catch (MessagingException me) {
  -         // check for existence of error if it does not exist create it
  -         if (error == null)
  -             error = new ArrayList();
  +         try {
   
  -         // exception occurs when any of the addresses cannot be
  -         // properly set in the message
  -            String errorinput = "Messaging Exception: Some address could"
  -                            + " not be set in the message." + me.getMessage();
  +             // create a mimebodypart for the body of the e-mail message
  +             MimeBodyPart mbp = new MimeBodyPart();
   
  -         error.add(errorinput);
  -     }
  +             // set the content in the bodypart 
  +             mbp.setContent(myparent.getBody(), myparent.getType());
  +
  +             // add the message as the first bodypart in the multipart object
  +             multipart.addBodyPart(mbp);
  +
  +             // get the list of attachments
  +             iterate = myparent.getBodyParts().listIterator();
  +
  +             // loop through the list of attachments and add them to the 
  +             // multipart object
  +             while (iterate.hasNext()) {
  +                 multipart.addBodyPart((MimeBodyPart) iterate.next());
  +             }
  +
  +             // add the multipart object with the attachments to the message
  +             message.setContent(multipart);
   
  +         } catch (MessagingException me) {
  +             // error occured while adding the message to the multipart
  +             // content
  +             throw new JspException("An error occured while trying to add" +
  +                                    "the attachments to the e-mail, please"
  +                                    +" to send the e-mail again.");
  +         }
  +     } else {
  +         try {
  +             // set the message with a mimetype according to type set by user
  +             message.setContent(myparent.getBody(), myparent.getType());
  +         } catch (MessagingException me) {
  +             // this error is not very likely to occur
  +             throw new JspException("The message could not be set in " +
  +                                "the e-mail, please back up and try again.");
  +         }
  +     }
        // check if errors have occured in creating the message
        if (error != null)
            return EVAL_BODY_TAG;
  @@ -335,8 +417,8 @@
        *  @throws JSPException  thrown when an error occurs while processing the
        *                        body of this method
        *
  -     *  @return - int telling the tag handler whether or not to evaluate the rest
  -     *             of the JSP
  +     *  @return - int telling the tag handler whether or not to evaluate the
  +     *            rest of the JSP
        *
        */
       public final int doEndTag() throws JspException {
  
  
  

Reply via email to