*
* This file contains functions needed to handle mime messages.
*
- * @copyright © 2003-2005 The SquirrelMail Project Team
+ * @copyright © 2003-2007 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
if (count($arg_a) > 9) {
$d = strtr($arg_a[0], array(' ' => ' '));
- $d = explode(' ', $d);
- if (!$arg_a[1]) $arg_a[1] = _("(no subject)");
+ $d_parts = explode(' ', $d);
+ if (!$arg_a[1]) $arg_a[1] = _("(no subject)");
- $hdr->date = getTimeStamp($d); /* argument 1: date */
+ $hdr->date = getTimeStamp($d_parts); /* argument 1: date */
+ $hdr->date_unparsed = strtr($d,'<>',' '); /* original date */
$hdr->subject = $arg_a[1]; /* argument 2: subject */
$hdr->from = is_array($arg_a[2]) ? $arg_a[2][0] : ''; /* argument 3: from */
$hdr->sender = is_array($arg_a[3]) ? $arg_a[3][0] : ''; /* argument 4: sender */
- $hdr->replyto = is_array($arg_a[4]) ? $arg_a[4][0] : ''; /* argument 5: reply-to */
+ $hdr->reply_to = is_array($arg_a[4]) ? $arg_a[4][0] : ''; /* argument 5: reply-to */
$hdr->to = $arg_a[5]; /* argument 6: to */
$hdr->cc = $arg_a[6]; /* argument 7: cc */
$hdr->bcc = $arg_a[7]; /* argument 8: bcc */
- $hdr->inreplyto = $arg_a[8]; /* argument 9: in-reply-to */
+ $hdr->in_reply_to = $arg_a[8]; /* argument 9: in-reply-to */
$hdr->message_id = $arg_a[9]; /* argument 10: message-id */
}
return $hdr;
}
/**
+ * function parseQuote
+ *
+ * This extract the string value from a quoted string. After the end-quote
+ * character is found it returns the string. The offset $i when calling
+ * this function points to the first double quote. At the end it points to
+ * The ending quote. This function takes care of escaped double quotes.
+ * "some \"string\""
+ * ^ ^
+ * initial $i end position $i
+ *
* @param string $read
- * @param integer $i
- * @return string
- * @todo document me
+ * @param integer $i offset in $read
+ * @return string string inbetween the double quotes
+ * @author Marc Groot Koerkamp
*/
function parseQuote($read, &$i) {
$s = '';
$iPos = ++$i;
+ $iPosStart = $iPos;
while (true) {
$iPos = strpos($read,'"',$iPos);
if (!$iPos) break;
$s = substr($read,$i,($iPos-$i));
$i = $iPos;
break;
+ } else if ($iPos > 1 && $read{$iPos -1} == '\\' && $read{$iPos-2} == '\\') {
+ // This is an unique situation where the fast detection of the string
+ // fails. If the quote string ends with \\ then we need to iterate
+ // through the entire string to make sure we detect the unexcaped
+ // double quotes correctly.
+ $s = '';
+ $bEscaped = false;
+ $k = 0;
+ for ($j=$iPosStart,$iCnt=strlen($read);$j<$iCnt;++$j) {
+ $cChar = $read{$j};
+ switch ($cChar) {
+ case '\\':
+ $bEscaped = !$bEscaped;
+ $s .= $cChar;
+ break;
+ case '"':
+ if ($bEscaped) {
+ $s .= $cChar;
+ $bEscaped = false;
+ } else {
+ $i = $j;
+ break 3;
+ }
+ break;
+ default:
+ if ($bEscaped) {
+ $bEscaped = false;
+ }
+ $s .= $cChar;
+ break;
+ }
+ }
}
++$iPos;
if ($iPos > strlen($read)) {
* @return integer
*/
function parseParenthesis($read, $i) {
- for (; $read{$i} != ')'; ++$i) {
+ for ($i++; $read{$i} != ')'; ++$i) {
switch ($read{$i}) {
case '"': $this->parseQuote($read, $i); break;
case '{': $this->parseLiteral($read, $i); break;
* @since 1.5.1
*/
function purgeAttachments() {
- if ($this->att_local_name && file_exists($this->att_local_name)) {
- unlink($this->att_local_name);
+ if ($this->att_local_name) {
+ global $username, $attachment_dir;
+ $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
+ if ( file_exists($hashed_attachment_dir . '/' . $this->att_local_name) ) {
+ unlink($hashed_attachment_dir . '/' . $this->att_local_name);
+ }
}
// recursively delete attachments from entities contained in this object
for ($i=0, $entCount=count($this->entities);$i< $entCount; ++$i) {
}
}
}
-
-?>