Charset conversion now occurs entirely within Horde_Mime_Headers.
* <pre>
* 'h' - The case-sensitive header name.
* 'p' - Parameters for this header.
- * 'v' - The value of the header.
+ * 'v' - The value of the header. Values are stored in UTF-8.
* </pre>
*
* @var array
*/
public function toArray($options = array())
{
- $charset = empty($options['charset']) ? null : $options['charset'];
+ $charset = empty($options['charset'])
+ ? null
+ : $options['charset'];
$address_keys = $this->addressFields();
$mime = $this->mimeParamFields();
$ret = array();
if (in_array($header, $address_keys) ) {
/* Address encoded headers. */
try {
- $text = Horde_Mime::encodeAddress($val[$key], $charset, empty($options['defserver']) ? null : $options['defserver']);
+ $text = Horde_Mime::encodeAddress(Horde_String::convertCharset($val[$key], 'UTF-8', $charset), $charset, empty($options['defserver']) ? null : $options['defserver']);
} catch (Horde_Mime_Exception $e) {
$text = $val[$key];
}
/* MIME encoded headers (RFC 2231). */
$text = $val[$key];
foreach ($ob['p'] as $name => $param) {
- foreach (Horde_Mime::encodeParam($name, $param, $charset, array('escape' => true)) as $name2 => $param2) {
+ foreach (Horde_Mime::encodeParam($name, Horde_String::convertCharset($param, 'UTF-8', $charset), $charset, array('escape' => true)) as $name2 => $param2) {
$text .= '; ' . $name2 . '=' . $param2;
}
}
} else {
$text = $charset
- ? Horde_Mime::encode($val[$key], $charset)
+ ? Horde_Mime::encode(Horde_String::convertCharset($val[$key], 'UTF-8', $charset), $charset)
: $val[$key];
}
* @param string $value The header value.
* @param array $options Additional options:
* <pre>
+ * 'charset' - (string) Charset of the header value.
+ * DEFAULT: UTF-8
* 'decode' - (boolean) MIME decode the value?
+ * DEFAULT: false
* 'params' - (array) MIME parameters for Content-Type or
* Content-Disposition.
+ * DEFAULT: None
* </pre>
*/
- public function addHeader($header, $value, $options = array())
+ public function addHeader($header, $value, array $options = array())
{
$header = trim($header);
$lcHeader = Horde_String::lower($header);
}
$ptr = &$this->_headers[$lcHeader];
- if (!empty($options['decode'])) {
+ if (empty($options['decode'])) {
+ if (!empty($options['charset'])) {
+ $value = Horde_String::convertCharset($value, $options['charset'], 'UTF-8');
+ }
+ } else {
// Fields defined in RFC 2822 that contain address information
if (in_array($lcHeader, $this->addressFields())) {
try {
* @param string $value The header value.
* @param array $options Additional options:
* <pre>
+ * 'charset' - (string) Charset of the header value.
+ * DEFAULT: UTF-8
* 'decode' - (boolean) MIME decode the value?
+ * DEFAULT: false
* 'params' - (array) MIME parameters for Content-Type or
- * Content-Disposition
+ * Content-Disposition.
+ * DEFAULT: None
* </pre>
*/
public function replaceHeader($header, $value, $options = array())
* @param string $value The header value.
* @param array $options Additional options:
* <pre>
+ * 'charset' - (string) Charset of the header value.
+ * DEFAULT: UTF-8
* 'decode' - (boolean) MIME decode the value?
* 'params' - (array) MIME parameters for Content-Type or
* Content-Disposition.
{
$lc_header = Horde_String::lower($header);
- /* Only encode value if charset is explicitly specified, otherwise
- * the message's charset will be used when building the message. */
- if (!empty($charset)) {
- if (in_array($lc_header, $this->_headers->addressFields())) {
- $value = Horde_Mime::encodeAddress($value, $charset);
- } else {
- $value = Horde_Mime::encode($value, $charset);
- }
- }
-
- if (is_null($overwrite)) {
- if (in_array($lc_header, $this->_headers->singleFields(true))) {
- $overwrite = true;
- }
+ if (is_null($overwrite) &&
+ in_array($lc_header, $this->_headers->singleFields(true))) {
+ $overwrite = true;
}
if ($overwrite) {
}
if ($lc_header !== 'bcc') {
- $this->_headers->addHeader($header, $value);
+ $this->_headers->addHeader($header, $value, array('charset' => $charset));
}
if (in_array($lc_header, array('to', 'cc', 'bcc'))) {
+ if ($charset) {
+ $value = in_array($lc_header, $this->_headers->addressFields())
+ ? Horde_Mime::encodeAddress($value, $charset)
+ : Horde_Mime::encode($value, $charset);
+ }
return $this->addRecipients($value);
}
}
// {
// // Example #1: Add custom headers to outgoing message.
// $custom_hdrs = array();
-// $hdr_charset = $message->getHeaderCharset();
//
// /* Add information on organization to which the sender belongs.
// * Not standardized for use in e-mail, but generally recognized.
// $custom_hdrs['X-Remote-Browser'] = $_SERVER['HTTP_USER_AGENT'];
//
// foreach ($custom_hdrs as $key => $val) {
-// $headers->addHeader($key, Horde_String::convertCharset($val, 'UTF-8', $hdr_charset));
+// $headers->addHeader($key, $val);
// }
//
//
/* Add Reply-To header. */
if (!empty($header['replyto']) &&
($header['replyto'] != $barefrom)) {
- $headers->addHeader('Reply-to', Horde_String::convertCharset($header['replyto'], 'UTF-8', $this->charset));
+ $headers->addHeader('Reply-to', $header['replyto']);
}
/* Add priority header, if requested. */
/* Keep Bcc: headers on saved messages. */
if (!empty($header['bcc'])) {
- $headers->addHeader('Bcc', Horde_String::convertCharset($header['bcc'], 'UTF-8', $this->charset));
+ $headers->addHeader('Bcc', $header['bcc']);
}
/* Strip attachments if requested. */
$ob->addMessageIdHeader();
if (isset($headers['from']) && strlen($headers['from'])) {
- $ob->addHeader('From', Horde_String::convertCharset($headers['from'], 'UTF-8', $this->charset));
+ $ob->addHeader('From', $headers['from']);
}
if (isset($headers['to']) && strlen($headers['to'])) {
- $ob->addHeader('To', Horde_String::convertCharset($headers['to'], 'UTF-8', $this->charset));
+ $ob->addHeader('To', $headers['to']);
} elseif (!isset($headers['cc'])) {
$ob->addHeader('To', 'undisclosed-recipients:;');
}
if (isset($headers['cc']) && strlen($headers['cc'])) {
- $ob->addHeader('Cc', Horde_String::convertCharset($headers['cc'], 'UTF-8', $this->charset));
+ $ob->addHeader('Cc', $headers['cc']);
}
if (isset($headers['subject']) && strlen($headers['subject'])) {
- $ob->addHeader('Subject', Horde_String::convertCharset($headers['subject'], 'UTF-8', $this->charset));
+ $ob->addHeader('Subject', $headers['subject']);
}
if (strpos($this->getMetadata('reply_type'), 'reply') === 0) {
if (!empty($replyto) && ($replyto != $email)) {
$msg_headers->addHeader('Reply-to', $replyto);
}
- $msg_headers->addHeader('Subject', Horde_Mime::encode(_("Free/Busy Request Response"), $charset));
+ $msg_headers->addHeader('Subject', _("Free/Busy Request Response"));
// Send the reply.
try {
continue;
}
$seen_email_addresses[$bare_address] = true;
-
+
if (empty($full_name) && isset($addr_arr[0]['personal'])) {
$full_name = $addr_arr[0]['personal'];
}