Update of 
/var/cvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform
In directory 
james.mmbase.org:/tmp/cvs-serv3766/portlets-dynamicforms/src/java/com/finalist/portlets/responseform

Modified Files:
        ResponseFormPortlet.java EmailSender.java 
Log Message:
CMSC-1015       Dynamic forms send emails which are marked as spam based on dns 
spf records


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform
See also: http://www.mmbase.org/jira/browse/CMSC-1015


Index: ResponseFormPortlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform/ResponseFormPortlet.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- ResponseFormPortlet.java    4 Jul 2008 16:23:34 -0000       1.16
+++ ResponseFormPortlet.java    14 Jul 2008 11:45:18 -0000      1.17
@@ -11,41 +11,22 @@
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import javax.activation.DataSource;
 import javax.mail.MessagingException;
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletPreferences;
-import javax.portlet.PortletSession;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
+import javax.portlet.*;
 
 import net.sf.mmapps.commons.bridge.RelationUtil;
-import org.apache.commons.lang.StringUtils;
 import net.sf.mmapps.modules.cloudprovider.CloudProvider;
 import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.portlet.*;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeIterator;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.NodeManager;
+import org.apache.commons.fileupload.portlet.PortletFileUpload;
+import org.apache.commons.lang.StringUtils;
+import org.mmbase.bridge.*;
 import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.remotepublishing.PublishManager;
 import org.mmbase.remotepublishing.util.PublishUtil;
@@ -53,18 +34,18 @@
 import com.finalist.cmsc.mmbase.PropertiesUtil;
 import com.finalist.cmsc.navigation.ServerUtil;
 import com.finalist.cmsc.portlets.ContentPortlet;
-import com.finalist.pluto.portalImpl.core.CmscPortletMode;
 
 public class ResponseFormPortlet extends ContentPortlet {
 
    protected static final String PARAMETER_MAP = "parameterMap";
    protected static final String ERRORMESSAGES = "errormessages";
 
-   private static final int DEFAULT_MAXFILESIZE = 2; // default file size in
-                                                      // Meg
+   private static final int DEFAULT_MAXFILESIZE = 2; // default file size in 
Meg
    private static final long MEGABYTE = 1024 * 1024; // 1 Meg
+
+   private static final String ENCODING_UTF8 = "UTF-8";
+
    private static final String FIELD_PREFIX = "field_";
-   // TODO: use these constants (and clean up this mess)
    private static final int TYPE_TEXTBOX = 1;
    private static final int TYPE_TEXTAREA = 2;
    private static final int TYPE_RADIO = 4;
@@ -78,32 +59,30 @@
    private static final String DEFAULT_EMAILREGEX = 
"^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$";
 
 
+   @Override
    @SuppressWarnings("unchecked")
    public void processView(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
       Map<String, String> errorMessages = new Hashtable<String, String>();
       Map<String, Object> parameterMap = new HashMap<String, Object>();
       DataSource attachment = processUserRequest(request, errorMessages, 
parameterMap);
-      String action = request.getParameter(ACTION_PARAM);
-      Map<String, Object> formfields = new HashMap<String, Object>();
-      StringBuffer data = new StringBuffer();
 
-      if (action == null) {
-         response.setPortletMode(CmscPortletMode.EDIT_DEFAULTS);
-      }
-      else if (action.equals("edit")) {
          PortletPreferences preferences = request.getPreferences();
          String contentelement = preferences.getValue(CONTENTELEMENT, null);
 
          if (contentelement != null) {
             if (parameterMap.size() > 0) {
+
+            String userEmailAddress = null;
+            StringBuffer data = new StringBuffer();
+            Map<String, Object> formfields = new HashMap<String, Object>();
+
                CloudProvider cloudProvider = 
CloudProviderFactory.getCloudProvider();
                Cloud cloud = cloudProvider.getCloud();
                Node responseForm = cloud.getNode(contentelement);
                NodeList formfieldList = 
SearchUtil.findRelatedOrderedNodeList(responseForm, "formfield", "posrel",
                      "posrel.pos");
-               NodeIterator formfieldIterator = formfieldList.nodeIterator();
-               String userEmailAddress = null;
 
+            NodeIterator formfieldIterator = formfieldList.nodeIterator();
                while (formfieldIterator.hasNext()) {
                   Node formfield = formfieldIterator.nextNode();
                   String number = formfield.getStringValue("number");
@@ -133,9 +112,10 @@
                   }
                   
                   if ((type == TYPE_TEXTBOX) && sendEmail) {   //If data is 
used as email address, then it should be valid 
-                      if (!isEmailAddress(userEmailAddress))
+                   if (!isEmailAddress(userEmailAddress)) {
                          errorMessages.put(fieldIdentifier, 
"view.formfield.invalid");
                   }
+               }
                   
                   if (type == TYPE_CHECKBOX) {
                      if(value != null && value instanceof String){
@@ -189,12 +169,6 @@
          else {
             getLogger().error("No contentelement");
          }
-         // switch to View mode
-         response.setPortletMode(PortletMode.VIEW);
-      }
-      else {
-         getLogger().error("Unknown action: '" + action + "'");
-      }
    }
 
 
@@ -309,13 +283,14 @@
       String emailTextBefore = responseform.getStringValue("emailbody");
       String emailTextAfter = responseform.getStringValue("emailbodyafter");
 
-      String senderEmailAddress = userEmailAddress;
-      String senderName = userEmailAddress;
-      if (StringUtils.isBlank(userEmailAddress)) {
-         senderEmailAddress = 
responseform.getStringValue("useremailsender").trim();
-         senderName = 
responseform.getStringValue("useremailsendername").trim();
+      String senderEmailAddress = 
responseform.getStringValue("useremailsender").trim();
+      String senderName = 
responseform.getStringValue("useremailsendername").trim();
+      if (StringUtils.isNotBlank(userEmailAddress)) {
+         senderName = userEmailAddress + " [CMS]";
+      }
+      if (!isEmailAddress(senderEmailAddress)) {
+         return false; //Last check email address
       }
-      if (!isEmailAddress(senderEmailAddress)) return false; //Last check 
email address
       
       emailTextBefore = emailTextBefore.trim();
       emailText.append(emailTextBefore);
@@ -327,9 +302,11 @@
          emailText.append(emailTextAfter);
       }
 
-      String emailAddressesValue = 
responseform.getStringValue("emailaddresses").replaceAll(" ","");
+      String emailAddressesValue = 
responseform.getStringValue("emailaddresses");
       String emailSubject = responseform.getStringValue("emailsubject").trim();
-      List<String> emailList = Arrays.asList(emailAddressesValue.split(";"));
+
+      List<String> emailList = splitEmailAddresses(emailAddressesValue);
+
       if (!isEmailAddress(emailList)) {
          getLogger().error("error sending email. Some of the following 
emailaddresses are incorrect: " + emailList.toString());
          return false; //Could not sent email because of false email address
@@ -337,7 +314,7 @@
 
       try {
          EmailSender.getInstance().sendEmail(senderEmailAddress, senderName, 
emailList, emailSubject, emailText.toString(),
-               attachment);
+               attachment, userEmailAddress);
          sent = true;
       }
       catch (UnsupportedEncodingException e) {
@@ -350,6 +327,17 @@
    }
 
 
+   private List<String> splitEmailAddresses(String emailAddressesValue) {
+      List<String> emailList = new ArrayList<String>();
+      StringTokenizer addresssTokenizer = new 
StringTokenizer(emailAddressesValue, " ,;");
+      while(addresssTokenizer.hasMoreTokens()) {
+         String address = addresssTokenizer.nextToken();
+         emailList.add(address);
+      }
+      return emailList;
+   }
+
+
    @SuppressWarnings("unchecked")
    @Override
    protected void doView(RenderRequest request, RenderResponse response) 
throws PortletException, IOException {
@@ -397,6 +385,7 @@
    }
 
 
+   @Override
    public void processEdit(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
       super.processEdit(request, response);
 
@@ -418,12 +407,12 @@
          Map<String, Object> parameterMap) {
       List<FileItem> fileItems = null;
       DataSource attachment = null;
-      String encoding = "UTF-8";
+
       List<String> parameterValues = null;
       try {
          DiskFileItemFactory factory = new DiskFileItemFactory();
          PortletFileUpload upload = new PortletFileUpload(factory);
-         upload.setHeaderEncoding(encoding);
+         upload.setHeaderEncoding(ENCODING_UTF8);
          fileItems = upload.parseRequest(request);
       }
       catch (FileUploadException e) {
@@ -444,15 +433,15 @@
                      else if (parameterMap.get(fileItem.getFieldName()) 
instanceof ArrayList){
                         parameterValues = (ArrayList<String>) 
parameterMap.get(fileItem.getFieldName());
                      }
-                     parameterValues.add(fileItem.getString(encoding));
+                     parameterValues.add(fileItem.getString(ENCODING_UTF8));
                      parameterMap.put(fileItem.getFieldName(), 
parameterValues);
                   }
                   else{
-                     parameterMap.put(fileItem.getFieldName(), 
fileItem.getString(encoding));
+                  parameterMap.put(fileItem.getFieldName(), 
fileItem.getString(ENCODING_UTF8));
                   }
                }
                catch (UnsupportedEncodingException e) {
-                  getLogger().error("UnsupportedEncoding " + encoding);
+                  getLogger().error("UnsupportedEncoding " + ENCODING_UTF8);
                }
             }
             else {
@@ -473,21 +462,33 @@
    }
 
    public boolean isEmailAddress(String emailAddress) {
-      if (emailAddress == null) return false;
-      if (StringUtils.isBlank(emailAddress)) return false;
+      if (emailAddress == null) {
+         return false;
+      }
+      if (StringUtils.isBlank(emailAddress)) {
+         return false;
+      }
       
       String emailRegex = getEmailRegex();
       return emailAddress.trim().matches(emailRegex);
    }
           
    public boolean isEmailAddress(List<String> emailList) {
-      if (emailList == null) return false;
-      if (emailList.isEmpty()) return false;
+      if (emailList == null) {
+         return false;
+      }
+      if (emailList.isEmpty()) {
+         return false;
+      }
             
       String emailRegex = getEmailRegex();
       for (String email : emailList) {
-        if (email == null || StringUtils.isBlank(email)) return false;
-         if (!email.matches(emailRegex)) return false;
+       if (email == null || StringUtils.isBlank(email)) {
+            return false;
+         }
+         if (!email.matches(emailRegex)) {
+            return false;
+         }
       }
       
       return true;


Index: EmailSender.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform/EmailSender.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- EmailSender.java    9 Jun 2008 21:23:06 -0000       1.4
+++ EmailSender.java    14 Jul 2008 11:45:18 -0000      1.5
@@ -6,7 +6,11 @@
 
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
-import javax.mail.*;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
 import javax.mail.internet.*;
 
 import org.apache.commons.lang.StringUtils;
@@ -55,14 +59,32 @@
    }
 
 
-   /*
-    * @param emailFrom The email address of the sender @param nameFrom The name
-    * of the sender @param toAddresses The list of email addresses of the
-    * receivers @param subject The subject of the email @param body The body of
-    * the email @param fileName The name of the attachment
+       /**
+    * @param emailFrom The email address of the sender 
+    * @param nameFrom The name of the sender 
+    * @param toAddresses The list of email addresses of the receivers 
+    * @param subject The subject of the email 
+    * @param body The body of the email @param fileName The name of the 
attachment
+    * @param attachment Binary part to add to the email message
     */
    public void sendEmail(String emailFrom, String nameFrom, List<String> 
toAddresses, String subject, String body,
-         DataSource dataSource) throws UnsupportedEncodingException, 
MessagingException {
+         DataSource attachment) throws UnsupportedEncodingException, 
MessagingException {
+      sendEmail(emailFrom, nameFrom, toAddresses, subject, body, attachment, 
null);
+   }
+
+
+   /**
+    * @param emailFrom The email address of the sender 
+    * @param nameFrom The name of the sender 
+    * @param toAddresses The list of email addresses of the receivers 
+    * @param subject The subject of the email 
+    * @param body The body of the email @param fileName The name of the 
attachment
+    * @param attachment Binary part to add to the message
+    * @param replyTo Address as reply-to header in the message
+    */
+   public void sendEmail(String emailFrom, String nameFrom, List<String> 
toAddresses,
+         String subject, String body, DataSource attachment, String replyTo)
+         throws MessagingException, UnsupportedEncodingException, 
AddressException {
       if (StringUtils.isBlank(emailFrom)) {
          emailFrom = PropertiesUtil.getProperty("mail.system.email");
       }
@@ -78,7 +100,18 @@
          addresses[i] = new InternetAddress(toAddresses.get(i));
       }
       message.addRecipients(Message.RecipientType.TO, addresses);
+
+      if (StringUtils.isNotBlank(replyTo)) {
+         message.setReplyTo(InternetAddress.parse(replyTo));
+      }
+
       message.setSubject(subject);
+      Multipart multipart = createMultiPart(body, attachment);
+      message.setContent(multipart);
+      Transport.send(message);
+   }
+
+   private Multipart createMultiPart(String body, DataSource dataSource) 
throws MessagingException {
       // create the message part
       MimeBodyPart messageBodyPart = new MimeBodyPart();
       messageBodyPart.setText(body);
@@ -93,18 +126,34 @@
          messageBodyPart.setFileName(dataSource.getName());
          multipart.addBodyPart(messageBodyPart);
       }
-      message.setContent(multipart);
-      Transport.send(message);
+      return multipart;
    }
 
 
-   /*
-    * @param emailFrom The email address of the sender @param nameFrom The name
-    * of the sender @param emailTo The email address of the receiver @param
-    * subject The subject of the email @param body The body of the email
+   /**
+    * @param emailFrom The email address of the sender 
+    * @param nameFrom The name of the sender 
+    * @param emailTo The email address of the receiver 
+    * @param subject The subject of the email 
+    * @param body The body of the email
     */
    public void sendEmail(String emailFrom, String nameFrom, String emailTo, 
String subject, String body)
          throws UnsupportedEncodingException, MessagingException {
+      sendEmail(emailFrom, nameFrom, emailTo, subject, body, null);
+   }
+
+
+   /**
+    * @param emailFrom The email address of the sender 
+    * @param nameFrom The name of the sender 
+    * @param emailTo The email address of the receiver 
+    * @param subject The subject of the email 
+    * @param body The body of the email
+    * @param replyTo Address as reply-to header in the message
+    */
+   public void sendEmail(String emailFrom, String nameFrom, String emailTo, 
String subject,
+         String body, String replyTo) throws MessagingException, 
UnsupportedEncodingException,
+         AddressException {
       if (StringUtils.isBlank(emailFrom)) {
          emailFrom = PropertiesUtil.getProperty("mail.system.email");
       }
@@ -115,6 +164,9 @@
       MimeMessage message = new MimeMessage(session);
       message.setFrom(new InternetAddress(emailFrom, nameFrom));
       message.addRecipient(Message.RecipientType.TO, new 
InternetAddress(emailTo));
+      if (StringUtils.isNotBlank(replyTo)) {
+         message.setReplyTo(InternetAddress.parse(replyTo));
+      }
       message.setSubject(subject);
       message.setText(body);
       Transport.send(message);
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to