function 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
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;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.