diff --git a/mcc.module b/mcc.module
index 198a0d1..366dcec 100644
--- a/mcc.module
+++ b/mcc.module
@@ -52,6 +52,14 @@ function mcc_menu() {
     'access arguments' => array(3, 'send mailchimp campaign'),
     'type' => MENU_CALLBACK,
   );
+  $items['mailchimp-campaign/%mcc/send-test/%'] = array(
+    'title' => 'Send campaign test',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('mcc_send_campaign_test_form', 1),
+    'access callback' => 'mcc_menu_operations_access',
+    'access arguments' => array(3, 'send mailchimp campaign'),
+    'type' => MENU_CALLBACK,
+  );
   $items['mailchimp-campaign/%mcc/send/%'] = array(
     'title' => 'Send',
     'page callback' => 'mcc_menu_operations',
@@ -105,6 +113,9 @@ function mcc_menu_operations($campaign, $op) {
     case 'update':
         mcc_update_campaign($campaign->cid);
       break;
+    case 'send-test':
+        mcc_send_campaign_test($campaign);
+      break;
     case 'send':
         mcc_send($campaign->cid);
       break;
@@ -174,6 +185,7 @@ function mcc_form_node_type_form_alter(&$form, $form_state) {
   $form['mcc']['list_id'] += $states;
   $form['mcc']['from_name'] += $states;
   $form['mcc']['from_email'] += $states;
+  $form['mcc']['test_recipient_email'] += $states;
   $form['mcc']['template_id'] += $states;
   $form['mcc']['title_section'] += $states;
   $form['mcc']['body_section'] += $states;
@@ -300,6 +312,7 @@ function theme_mcc_actions($variables) {
     $items[] = l(t('Delete'), 'mailchimp-campaign/' . $cid . '/delete/' . drupal_get_token('mcc'), $destination);
   }
   $items[] = l(t('Update'), 'mailchimp-campaign/' . $cid . '/update/' . drupal_get_token('mcc', $destination));
+  $items[] = l(t('Send campaign test'), 'mailchimp-campaign/' . $cid . '/send-test/' . drupal_get_token('mcc', $destination));
   if ($data['status'] == 'save') {
     $items[] = l(t('Send'), 'mailchimp-campaign/' . $cid . '/send/' . drupal_get_token('mcc', $destination));
   }
@@ -348,6 +361,8 @@ function mcc_create_form($form, &$form_state) {
   );
   if (user_access('administer mailchimp')) {
     mcc_settings_form($form, $defaults);
+    // no need test email for _this_ campaign. you have to add it on the node type page.
+    $form['mcc']['test_recipient_email']['#access'] = 0;
   }
   $form['mcc']['create'] = array(
     '#type' => 'submit',
@@ -538,6 +553,70 @@ function mcc_send($cid) {
 }
 
 /**
+ * Send MailChimp campaign test email - confirm form
+ */
+function mcc_send_campaign_test_form($form, &$form_state) {
+  $campaign = $form_state['build_info']['args'][0];
+
+  $form['info'] = array(
+    '#markup' => t('Campaign ID: %cid', array('%cid' => $campaign->cid)),
+    '#suffix' => '<br />',
+  );
+
+  return confirm_form(
+    $form,
+    t('Are you sure you want to send test from this campaign: %id', array('%id' => $campaign->data['title'])),
+    'node/' . $campaign->nid . '/mailchimp-campaigns',
+    t('You allowed to send out as many test emails from your campaign as you want.'),
+    t('Send campaign test')
+  );
+}
+
+/**
+ * Send test campaign
+ */
+function mcc_send_campaign_test_form_submit($form, &$form_state) {
+  $campaign = $form_state['build_info']['args'][0];
+
+  $campaign_node = node_load($campaign->nid);
+  if ($campaign_node) {
+    $type = $campaign_node->type;
+    $var_name = 'mcc_node_type_settings_' . $type;
+
+    $campaign_settings = variable_get($var_name, array());
+    if (empty($campaign_settings['test_recipient_email'])) {
+      $campaign_settings = variable_get('mcc', array());
+    }
+
+    if (!empty($campaign_settings['test_recipient_email'])) {
+      // sending test campaign mail
+      $mcapi = mailchimp_get_api_object();
+
+      $emails = array($campaign_settings['test_recipient_email']);
+      // Send test campaign.
+      $sent = $mcapi->campaignSendTest($campaign->cid, $emails);
+
+      if ($mcapi->errorCode) {
+        // Display and log error, if any.
+        $message = 'MailChimp error. The campaign test was not sent.';
+        _mcc_mcapi_error_message($mcapi, $message);
+      }
+      else {
+        // Log action, and notify the user.
+        $message = 'MailChimp test campaign was sent.';
+        drupal_set_message(t($message));
+        watchdog('mcc', $message);
+      }
+    }
+
+    $form_state['redirect'] = 'node/' . $campaign_node->nid . '/mailchimp-campaigns';
+  }
+  else {
+    $form_state['redirect'] = '<front>';
+  }
+}
+
+/**
  * Delete a campaign from MailChimp.
  */
 function mcc_delete_campaign($cid) {
diff --git a/mcc.settings.inc b/mcc.settings.inc
index 92db818..f2678e6 100644
--- a/mcc.settings.inc
+++ b/mcc.settings.inc
@@ -34,6 +34,12 @@ function mcc_settings_form(&$form, $defaults) {
     '#title' => t('From email'),
     '#default_value' => $defaults ? $defaults['from_email'] : variable_get('site_mail', FALSE),
   );
+  $form['mcc']['test_recipient_email'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Test email address'),
+    '#description' => t('Email address for campaign testing'),
+    '#default_value' => $defaults ? $defaults['test_recipient_email'] : variable_get('site_mail', FALSE),
+  );
   $form['mcc']['template_id'] = array(
     '#type' => 'textfield',
     '#title' => t('Template ID'),
@@ -77,6 +83,13 @@ function mcc_settings_form_validate($form, &$form_state) {
     form_set_error('mcc][from_email', t('From email is not valid.'));
   }
 
+  if ($values['test_recipient_email'] == '') {
+    $form_state['values']['mcc']['test_recipient_email'] = $defaults ? $defaults['test_recipient_email'] : variable_get('site_mail', FALSE);
+  }
+  elseif (!valid_email_address($values['test_recipient_email'])) {
+    form_set_error('mcc][test_recipient_email', t('Test email address is not valid.'));
+  }
+
   if ($values['template_id'] == '') {
     $form_state['values']['mcc']['template_id'] = $defaults ? $defaults['template_id'] : MCC_DEFAULT_TEMPLATE;
   }
