diff -ur print_mail/print_mail.admin.inc print_mail/print_mail.admin.inc
--- print_mail/print_mail.admin.inc	2009-03-27 02:12:35.000000000 +0100
+++ print_mail/print_mail.admin.inc	2009-05-04 15:02:37.943154772 +0200
@@ -137,6 +137,15 @@
     '#description' => t('If checked, the user will be able to choose between sending the full content or only the teaser at send time.'),
   );
 
+  if (module_exists('job_queue')) {
+    $form['settings']['print_mail_job_queue'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Send e-mails using Job Queue'),
+      '#default_value' => variable_get('print_mail_job_queue', PRINT_MAIL_JOB_QUEUE_DEFAULT),
+      '#description' => t("Selecting this option, e-mail delivery will be performed by the Job Queue module during each cron run. Leaving this unselected, the e-mail will be sent immediately, but the site will take slightly longer to reply to the user."),
+    );
+  }
+
   return system_settings_form($form);
 }
 
diff -ur print_mail/print_mail.inc print_mail/print_mail.inc
--- print_mail/print_mail.inc	2009-04-23 00:11:37.000000000 +0200
+++ print_mail/print_mail.inc	2009-05-04 15:38:22.971787224 +0200
@@ -262,6 +262,14 @@
       ob_end_clean();
 
       $ok = FALSE;
+      if (function_exists('job_queue_add') && variable_get('print_mail_job_queue', PRINT_MAIL_JOB_QUEUE_DEFAULT)) {
+        $use_job_queue = TRUE;
+        $this_file = drupal_get_path('module', 'print_mail') .'/print_mail.inc';
+      }
+      else {
+        $use_job_queue = FALSE;
+      }
+
       $addresses = explode(', ', $form_state['values']['txt_to_addrs']);
       foreach ($addresses as $to) {
         // Call to hook_print_mail_before_send in order to know if the mail can be sent
@@ -269,8 +277,15 @@
         $can_send = module_invoke_all('print_mail_before_send', $node, $to, $from, $params);
 
         if (!in_array(FALSE, $can_send)) {
-          $ret = drupal_mail('print_mail', 'sendpage', $to, language_default(), $params, $from, TRUE);
-          if ($ret['result']) {
+          if ($use_job_queue) {
+            // Use job queue to send mails during cron runs
+            job_queue_add('drupal_mail', t('print_mail: From %from', array('%from' => $from)), array('print_mail', 'sendpage', $to, language_default(), $params, $from, TRUE), $this_file, TRUE);
+          }
+          else {
+            // Send mail immediately using Drupal's mail handler
+            $ret = drupal_mail('print_mail', 'sendpage', $to, language_default(), $params, $from, TRUE);
+          }
+          if ($ret['result'] || $use_job_queue) {
             // Call to hook_print_mail_after_send in order to provide information to other modules.
             module_invoke_all('print_mail_after_send', $node, $to, $from, $params);
 
diff -ur print_mail/print_mail.install print_mail/print_mail.install
--- print_mail/print_mail.install	2009-03-17 21:55:07.000000000 +0100
+++ print_mail/print_mail.install	2009-05-04 15:04:39.569264333 +0200
@@ -36,6 +36,7 @@
   variable_del('print_mail_text_confirmation');
   variable_del('print_mail_text_message');
   variable_del('print_mail_text_subject');
+  variable_del('print_mail_job_queue');
   $settings = db_query("SELECT name FROM {variable} WHERE name LIKE 'print\_mail\_display\_%'");
   while ($variable = db_fetch_object($settings)) {
     variable_del($variable->name);
diff -ur print_mail/print_mail.module print_mail/print_mail.module
--- print_mail/print_mail.module	2009-04-23 11:31:01.000000000 +0200
+++ print_mail/print_mail.module	2009-05-04 15:34:01.261443149 +0200
@@ -22,6 +22,7 @@
 define('PRINT_MAIL_HOURLY_THRESHOLD', 3);
 define('PRINT_MAIL_TEASER_DEFAULT_DEFAULT', 1);
 define('PRINT_MAIL_TEASER_CHOICE_DEFAULT', 1);
+define('PRINT_MAIL_JOB_QUEUE_DEFAULT', 0);
 
 /**
  * Implementation of hook_theme().
@@ -254,6 +255,16 @@
 }
 
 /**
+ * Implementation of hook_job_queue_functions.
+ */
+function print_mail_job_queue_functions() {
+  $functions['print_mail'] = array(
+   'title' => t('Send to friend'),
+  );
+  return $functions;
+}
+
+/**
  * Auxiliary function to assign the per-node settings to the node object fields
  *
  * @param $node
