You are here

function drupal_wrap_mail in Drupal 7

Same name and namespace in other branches
  1. 6 includes/mail.inc \drupal_wrap_mail()

Performs format=flowed soft wrapping for mail (RFC 3676).

We use delsp=yes wrapping, but only break non-spaced languages when absolutely necessary to avoid compatibility issues.

We deliberately use LF rather than CRLF, see drupal_mail().

Parameters

string $text: The plain text to process.

string $indent (optional): A string to indent the text with. Only '>' characters are repeated on subsequent wrapped lines. Others are replaced by spaces.

Return value

string The content of the email as a string with formatting applied.

5 calls to drupal_wrap_mail()
DefaultMailSystem::format in modules/system/system.mail.inc
Concatenate and wrap the e-mail body for plain-text mails.
DrupalHtmlToTextTestCase::testDrupalHtmltoTextRemoveTrailingWhitespace in modules/simpletest/tests/mail.test
Tests that drupal_wrap_mail() removes trailing whitespace before newlines.
DrupalHtmlToTextTestCase::testDrupalHtmltoTextUsenetSignature in modules/simpletest/tests/mail.test
Tests drupal_wrap_mail() retains whitespace from Usenet style signatures.
drupal_html_to_text in includes/mail.inc
Transforms an HTML string into plain text, preserving its structure.
MailTestCase::format in modules/simpletest/tests/mail.test
Concatenate and wrap the e-mail body for plain-text mails.

File

includes/mail.inc, line 362
API functions for processing and sending e-mail.

Code

function drupal_wrap_mail($text, $indent = '') {

  // Convert CRLF into LF.
  $text = str_replace("\r", '', $text);

  // See if soft-wrapping is allowed.
  $clean_indent = _drupal_html_to_text_clean($indent);
  $soft = strpos($clean_indent, ' ') === FALSE;

  // Check if the string has line breaks.
  if (strpos($text, "\n") !== FALSE) {

    // Remove trailing spaces to make existing breaks hard, but leave signature
    // marker untouched (RFC 3676, Section 4.3).
    $text = preg_replace('/(?(?<!^--) +\\n|  +\\n)/m', "\n", $text);

    // Wrap each line at the needed width.
    $lines = explode("\n", $text);
    array_walk($lines, '_drupal_wrap_mail_line', array(
      'soft' => $soft,
      'length' => strlen($indent),
    ));
    $text = implode("\n", $lines);
  }
  else {

    // Wrap this line.
    _drupal_wrap_mail_line($text, 0, array(
      'soft' => $soft,
      'length' => strlen($indent),
    ));
  }

  // Empty lines with nothing but spaces.
  $text = preg_replace('/^ +\\n/m', "\n", $text);

  // Space-stuff special lines.
  $text = preg_replace('/^(>| |From)/m', ' $1', $text);

  // Apply indentation. We only include non-'>' indentation on the first line.
  $text = $indent . substr(preg_replace('/^/m', $clean_indent, $text), strlen($indent));
  return $text;
}