Index: mailhandler.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.admin.inc,v
retrieving revision 1.1.2.16
diff -u -r1.1.2.16 mailhandler.admin.inc
--- mailhandler.admin.inc	26 Jan 2011 23:48:13 -0000	1.1.2.16
+++ mailhandler.admin.inc	27 Jan 2011 17:09:43 -0000
@@ -206,49 +206,11 @@
 
 
 /**
- * Verify that the Mailbox is valid, and save it to the database.
+ * Validation hook for mailhandler_add_edit_mailbox() form.
  */
 function mailhandler_add_edit_mailbox_validate($form, &$form_state) {
-
-  // Check for valid email address
-  if ($error = user_validate_mail($form_state['values']['mail'])) {
-    form_set_error('mail', $error);
-  }
-
-  if ($form_state['values']['mailto'] && ($error = user_validate_mail($form_state['values']['mailto']))) {
-    form_set_error('mailto', $error);
-  }
-
-  // Test POP/IMAP settings, and store result
-  $mailbox_appears_ok = TRUE;
-
-  if ($form_state['values']['domain'] && $form_state['values']['port'] && !is_numeric($form_state['values']['port'])) { // assume external mailbox
-    form_set_error('port', t('Mailbox port must be an integer.'));
-    $mailbox_appears_ok = FALSE;
-  }
-
-  if (!$form_state['values']['domain'] && !$form_state['values']['port'] && $form_state['values']['folder']) { // assume local folder
-    // check read and write permission
-    if (!is_readable($form_state['values']['folder']) || !is_writable($form_state['values']['folder'])) {
-      form_set_error('port', t('The local folder has to be readable and writable by owner of the webserver process, e.g. nobody.'));
-      $mailbox_appears_ok = FALSE;
-    }
-  }
-
-  // Test POP/IMAP settings are valid in all cases, and test connection if requested
-  if ($mailbox_appears_ok && $form_state['clicked_button']['#value'] == t('Test connection')) {
-    // Call the test function
-    mailhandler_test_mailbox($form_state);
-
-    // We don't want to save, so we set an 'invisible error' that means the form is not submitted
-    form_set_error('mailhandler');
-  }
-
-  // If POP3 mailbox is chosen, messages must be deleted after processing.
-  if ($form_state['values']['imap'] == 0 && $form_state['values']['delete_after_read'] == 0) {
-    form_set_error('delete_after_read', t('You must check off "Delete messages after they are processed" when using a POP3 mailbox.'));
-  }
-
+  $mailbox = $form_state['values'];
+  mailhandler_mailbox_validate($mailbox, $form, $form_state);
 }
 
 
Index: mailhandler.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.module,v
retrieving revision 1.96.2.33
diff -u -r1.96.2.33 mailhandler.module
--- mailhandler.module	27 Jan 2011 13:17:40 -0000	1.96.2.33
+++ mailhandler.module	27 Jan 2011 17:12:05 -0000
@@ -265,6 +265,74 @@
 }
 
 /**
+ * Validate a Mailhandler Mailbox.
+ *
+ * Validate the mailbox and set form errors. Even if this function is not used
+ * in a form (e.g. validating mailboxes created programatically), the function
+ * will still set form errors. These errors can be later recalled using the
+ * function form_get_errors().
+ *
+ * <code>
+ *   mailhandler_mailbox_validate($mailbox);
+ *   if ($errors = form_get_errors()) {
+ *     do_my_error_handling($errors);
+ *   }
+ *   else {
+ *     mailhandler_mailbox_save($mailbox);
+ *   }
+ * </code>
+ *
+ * @param $mailbox
+ *   A mailbox settings array.
+ * @param $form
+ *   The $form where mailbox is being edited.
+ * @param $form_state
+ *   The $form_state values of the form being validated.
+ */
+function mailhandler_mailbox_validate($mailbox, $form = array(), &$form_state = array()) {
+  // Check for valid email address
+  if ($error = user_validate_mail($mailbox['mail'])) {
+    form_set_error('mail', $error);
+  }
+
+  if ($form_state['values']['mailto'] && ($error = user_validate_mail($mailbox['mailto']))) {
+    form_set_error('mailto', $error);
+  }
+
+  // Test POP/IMAP settings, and store result
+  $mailbox_appears_ok = TRUE;
+
+  // Assume external mailbox.
+  if ($mailbox['domain'] && $mailbox['port'] && !is_numeric($mailbox['port'])) {
+    form_set_error('port', t('Mailbox port must be an integer.'));
+    $mailbox_appears_ok = FALSE;
+  }
+
+  // Assume local folder.
+  if (!$mailbox['domain'] && !$mailbox['port'] && $mailbox['folder']) {
+    // check read and write permission
+    if (!is_readable($mailbox['folder']) || !is_writable($mailbox['folder'])) {
+      form_set_error('port', t('The local folder has to be readable and writable by owner of the webserver process, e.g. nobody.'));
+      $mailbox_appears_ok = FALSE;
+    }
+  }
+
+  // If POP3 mailbox is chosen, messages must be deleted after processing.
+  if ($mailbox['imap'] == 0 && $mailbox['delete_after_read'] == 0) {
+    form_set_error('delete_after_read', t('You must check off "Delete messages after they are processed" when using a POP3 mailbox.'));
+  }
+  
+  // Test POP/IMAP settings are valid in all cases, and test connection if requested
+  if ($mailbox_appears_ok && $form_state['clicked_button']['#value'] == t('Test connection')) {
+    // Call the test function
+    mailhandler_test_mailbox($form_state);
+
+    // We don't want to save, so we set an 'invisible error' that means the form is not submitted
+    form_set_error('mailhandler');
+  }
+}
+
+/**
  * Save a Mailhandler Mailbox in the database.
  *
  * When $mailbox has 'mid' attribute defined, the database entry with this ID

