Index: webform.module
===================================================================
--- webform.module	(revision 13)
+++ webform.module	(working copy)
@@ -1548,6 +1548,11 @@
             '#value' => empty($node->webform['submit_text']) ? t('Submit') : $node->webform['submit_text'],
             '#weight' => 1001,
           );
+          $form['resend'] = array(
+            '#type' => 'submit',
+            '#value' => t('Resend'),
+            '#weight' => 1001,
+          );
         }
         elseif ($page_num < $page_count) {
           $form['next'] = array(
@@ -1565,6 +1570,11 @@
           '#value' => empty($node->webform['submit_text']) ? t('Submit') : $node->webform['submit_text'],
           '#weight' => 1000,
         );
+        $form['resend'] = array(
+          '#type' => 'submit',
+          '#value' => t('Resend'),
+          '#weight' => 1001,
+        );
       }
     }
 
@@ -1676,6 +1686,7 @@
 }
 
 function webform_client_form_submit($form, &$form_state) {
+
   global $user, $base_url;
   module_load_include('inc', 'webform', 'webform_submissions');
   webform_load_components();
@@ -1684,7 +1695,7 @@
 
   // Check for a multi-page form that is not yet complete.
   $submit_op = empty($node->webform['submit_text']) ? t('Submit') : $node->webform['submit_text'];
-  if ($form_state['values']['op'] != $submit_op) {
+  if ($form_state['values']['op'] != $submit_op && $form_state['values']['op'] != t('Resend')) {
     // Checkboxes need post-processing to maintain their values.
     _webform_client_form_submit_process($node, $form_state['values']['submitted'], array('select', 'grid'));
 
@@ -1782,7 +1793,7 @@
   $sid = $form_state['values']['details']['sid'];
 
   // Check if this form is sending an email.
-  if ((!empty($node->webform['email']) || !empty($node->webform['additional_emails'])) && $form_state['values']['details']['is_new']) {
+  if (($form_state['values']['op'] == t('Resend')) || (!empty($node->webform['email']) || !empty($node->webform['additional_emails'])) && $form_state['values']['details']['is_new']) {
 
     // Set values for the name, address, and subject for the email.
     $email_from_name = $node->webform['email_from_name'];
@@ -1820,9 +1831,23 @@
     $froms = array();
     $subjects = array();
     foreach ($emails as $cid => $email) {
+
+      $attachments[$cid] = array();
+      foreach ($form_state['values']['submitted'] as $key => $value) {
+        if (substr($value, 0, 2) == "a:") {
+          $file = @unserialize($value);
+          if (is_array($file)) {
+            $f['filepath'] = $file['filepath'];
+            $f['filemime'] = $file['filemime'];
+            $f['file'] = $file['filename'];
+            $attachments[$cid][] = $file;
+          }
+        }
+      }
+
       $messages[$cid] = theme(array('webform_mail_'. $node->nid, 'webform_mail', 'webform_mail_message'), $form_state['values'], $node, $sid, $cid);
       $headers[$cid] = theme(array('webform_mail_headers_'. $node->nid, 'webform_mail_headers'), $form_state['values'], $node, $sid, $cid);
-
+      
       // Assemble the FROM string.
       if (isset($headers[$cid]['From'])) {
         $froms[$cid] = $headers[$cid]['From'];
@@ -1864,8 +1889,25 @@
       // to be sent out.
       if (is_array($address)) {
         foreach ($address as $single_address) {
-          drupal_mail('webform', 'submission', $single_address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid]);
 
+          if (module_exists('mimemail')) {
+            $message = drupal_mail('webform', 'submission', $single_address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid], FALSE);
+                $message['result'] = mimemail(
+                  $message['from'],
+                  $message['to'],
+                  $message['subject'],
+                  nl2br($message['body']),
+                  TRUE,
+                  $message['headers'],
+                  '',
+                  $attachments[$cid], // files
+                  ''
+                );
+          }
+          else {
+            drupal_mail('webform', 'submission', $single_address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid]);
+          }
+          
           // Debugging output for email.
           if (variable_get('webform_debug', 0) >= 2) {
             drupal_set_message('E-mail Headers: <pre>'. htmlentities(print_r($headers[$cid], TRUE)) .'</pre>To: '. $single_address .'<br />From: '. htmlentities($froms[$cid]) .'<br />Subject: '. $subjects[$cid] .'<br />E-mail Body: <pre>'. $messages[$cid] .'</pre>');
@@ -1873,7 +1915,24 @@
         }
       }
       else {
-        drupal_mail('webform', 'submission', $address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid]);
+        if (module_exists('mimemail')) {
+          $message = drupal_mail('webform', 'submission', $address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid], FALSE);
+              $message['result'] = mimemail(
+                $message['from'],
+                $message['to'],
+                $message['subject'],
+                nl2br($message['body']),
+                TRUE,
+                $message['headers'],
+                '',
+                $attachments[$cid], // files
+                ''
+              );
+          
+        }
+        else {
+          drupal_mail('webform', 'submission', $address, user_preferred_language($user), array('message' => $messages[$cid], 'subject' => $subjects[$cid], 'headers' => $headers[$cid]), $froms[$cid]);
+        }
 
         // Debugging output for email.
         if (variable_get('webform_debug', 0) >= 2) {
@@ -2488,3 +2547,4 @@
   // Ensure only wanted components are returned, even all are loaded.
   return $return_all ? $component_list : array_intersect_assoc($component_list, $enabled_list);
 }
+
