Index: mail.module
===================================================================
--- mail.module	(revision 10)
+++ mail.module	(working copy)
@@ -205,29 +205,47 @@
  * @return
  *   A string containing the entire HTML page.
  */
-function theme_mail_message($node) {
+function theme_mail_message($node, $account) {
   global $user;
-  $output = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
-  $output .= '<html xmlns="http://www.w3.org/1999/xhtml">';
-  $output .= '<head>';
-  $output .= ' <title>'. $node->title .'</title>';
-  $output .= drupal_get_html_head();
-  $output .= theme_get_styles();
-
-  $output .= '</head>';
-  $output .= '<body style="background-color: #fff; color: #000;"'. theme('onload_attribute'). '">';
-  $output .= '<table border="0" cellspacing="4" cellpadding="4"><tr><td style="vertical-align: top;">';
-
-  $output .= "\n<!-- begin content -->\n";
-  $output .= '<p>' . t('Sent by <a href="%name-url">%name</a> from %site.', array('%name' => $user->name, '%name-url' => url("user/$user->uid", NULL, NULL, TRUE), '%site' => variable_get('site_name', 'drupal'))) . '</p>';
-  $output .= '<p>' . t('If you don\'t wish to receive such e-mails, you can <a href="%url">change your account settings</a>.', array('%url' => url('user/' . $node->uid, NULL, NULL, TRUE))) . '</p>';
-  $output .= node_view($node, FALSE, FALSE, FALSE);
-  $output .= "\n<!-- end content -->\n";
-
-  $output .= '</td></tr></table>';
-  $output .= theme_closure();
-  $output .= '</body></html>';
-
+  $output = '';
+  
+  // first theme the node body
+  $message = node_invoke($node, 'view_mail', $account, $node->mail_format);
+  if (!$message) {
+	$message = node_view($node, FALSE, FALSE, FALSE);
+  }
+  $variables = array('%username' => $account->name, '%site' => variable_get('site_name', 'drupal'), '%uri' => $base_url, '%uri_brief' => substr($base_url, strlen('http://')), '%mailto' => $account->mail, '%date' => format_date(time()), '%login_uri' => url('user/login', NULL, NULL, TRUE), '%edit_uri' => url('user/edit', NULL, NULL, TRUE));
+  $message = strtr($message, $variables);
+  
+  // now theme the entire mail
+  if ($node->mail_format == 'plain') {
+	$output .= t("Sent by %name from %site, regarding <%url>.", array('%name' => $user->name, '%site' => variable_get('site_name', 'drupal'), '%title' => $node->title, '%url' => url("node/$node->nid", NULL, NULL, TRUE))) . "\n";
+	$output .= t('If you don\'t wish to receive such e-mails, you can change your account settings: <%url>.', array('%url' => url('user/' . $account->uid .'/edit', NULL, NULL, TRUE))) . "\n";
+	$output .= "---\n\n";
+	$output .= strip_tags($message);
+  }
+  else {
+	$output .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
+	$output .= '<html xmlns="http://www.w3.org/1999/xhtml">';
+	$output .= '<head>';
+	$output .= ' <title>'. $node->title .'</title>';
+	$output .= drupal_get_html_head();
+	$output .= theme_get_styles();
+	
+	$output .= '</head>';
+	$output .= '<body style="background-color: #fff; color: #000;"'. theme('onload_attribute'). '">';
+	$output .= '<table border="0" cellspacing="4" cellpadding="4"><tr><td style="vertical-align: top;">';
+	
+	$output .= "\n<!-- begin content -->\n";
+	$output .= '<p>' . t('Sent by <a href="%name-url">%name</a> from %site, regarding <a href="%node-url">%node-title</a>.', array('%name' => $user->name, '%name-url' => url("user/$user->uid", NULL, NULL, TRUE), '%site' => variable_get('site_name', 'drupal'), '%node-url' => url("node/$node->nid", NULL, NULL, TRUE), '%node-title' => $node->title)) . '</p>';
+	$output .= '<p>' . t('If you don\'t wish to receive such e-mails, you can <a href="%url">change your account settings</a>.', array('%url' => url('user/' . $account->uid .'/edit', NULL, NULL, TRUE))) . '</p>';
+	$output .= $message;
+	$output .= "\n<!-- end content -->\n";
+	
+	$output .= '</td></tr></table>';
+	$output .= theme_closure();
+	$output .= '</body></html>';
+  }
   return $output;
 }
 
@@ -257,14 +275,9 @@
     }
     if($account->mail) {
       $node->to = $account->mail;
-      $variables = array('%username' => $account->name, '%site' => variable_get('site_name', 'drupal'), '%uri' => $base_url, '%uri_brief' => substr($base_url, strlen('http://')), '%mailto' => $account->mail, '%date' => format_date(time()), '%login_uri' => url('user/login', NULL, NULL, TRUE), '%edit_uri' => url('user/edit', NULL, NULL, TRUE));
-      $message = strtr(node_view($node, FALSE, FALSE, FALSE), $variables);
-      if ($node->mail_format == 'plain') {
-        $node->message = strip_tags($message);
-      }
-      else {
-        $node->message = theme('mail_message', $node);
-      }
+
+	  $node->message = theme('mail_message', $node, $account);
+
       if(!mail_send($node)) {
         $success = false;
       }
