hallo!
I found a problem I already had some times ago, that is some messages are not 
displayed when in threaded mode.
I've found that all the messages have the same problem, they haven't a real 
subject, and they belong to one of these:
-a reply message to an empty subject email (subjects: Re:, Fwd:, ....) (these 
are good emails, not spam)
-spam messages with malformed subject lines

in both cases ilohamail failed to display the message. in non-threaded mode 
everything was ok

I fixed the bug in imap.inc adding an ELSE to the IF 
        if ($has_re&&$new['IN-REPLY-TO']){
that is
else  
{
    if ($debug) echo "z&c: it's a stray<br>";
    if ($debug) echo "z&c added to root\n";
    $roots[$sbj] = $id;
    $root_in_root[$id] = !$has_re;
    $sub_mids[$new['MESSAGE-ID']] = $id;
    $result[$id] = array($id);
}

that adds the message to the root list


see the attached diff.txt 
bye


-- 
Ing. Massimo Citterio
Resp. Sistemi Informativi
Kaptus s.r.l.
via De Amicis 42
20123 Milano
tel diretto: (+39) 02 80298405
altro:       (+39) 02 86995518
fax          (+39) 02 86452360
www.kaptus.com
[EMAIL PROTECTED]
--- old_imap.inc        2006-05-10 15:08:39.000000000 +0200
+++ imap.inc    2006-05-10 12:39:27.000000000 +0200
@@ -993,6 +993,7 @@
        $mid_to_id = array();
        $messages = array();
        $headers = iil_C_FetchThreadHeaders($conn, $mailbox, $message_set);
+
        if ($clock) $clock->register('fetched headers');
        
        if ($debug) print_r($headers);
@@ -1011,30 +1012,30 @@
                
                /* if no subject, use message-id */
                if (empty($new['SUBJECT'])) $new['SUBJECT'] = 
$new['MESSAGE-ID'];
-               
                /* if subject contains 'RE:' or has in-reply-to header, it's a 
reply */
                $sbj_pre ='';
                $has_re = false;
                if (eregi($sbj_filter_pat, $new['SUBJECT'])) $has_re = true;
                if ($has_re||$new['IN-REPLY-TO']) $sbj_pre = 'RE:';
-               
+
                /* strip out 're:', 'fw:' etc */
                if ($has_re) $sbj = ereg_replace($sbj_filter_pat,'', 
$new['SUBJECT']);
                else $sbj = $new['SUBJECT'];
                $new['SUBJECT'] = $sbj_pre.$sbj;
                
-               
                /* if subject not a known thread-root, add to list */
-               if ($debug) echo $id.' 
'.$new['SUBJECT']."\t".$new['MESSAGE-ID']."\n";
+               //if ($debug) echo "debug: ".$id.' 
'.$new['SUBJECT']."\t".$new['MESSAGE-ID']."\n";
                $root_id = $roots[$sbj];
-               
                if ($root_id && ($has_re || !$root_in_root[$root_id])){
                        if ($debug) echo "\tfound root: $root_id\n";
                        $sub_mids[$new['MESSAGE-ID']] = $root_id;
                        $result[$root_id][] = $id;
                }else if 
(!isset($roots[$sbj])||(!$has_re&&$root_in_root[$root_id])){
+                 if ($debug) echo "\tin else, try to use In-Reply-To header to 
find root<br>";
+
                        /* try to use In-Reply-To header to find root 
                                unless subject contains 'Re:' */
+                 if ($debug) echo "has_re? $has_re, in reply to: 
".$new['IN-REPLY-TO'];
                        if ($has_re&&$new['IN-REPLY-TO']){
                                if ($debug) echo "\tlooking: 
".$new['IN-REPLY-TO']."\n";
                                
@@ -1047,11 +1048,26 @@
                                        $result[$temp][] = $id;
                                        $sub_mids[$new['MESSAGE-ID']] = $temp;
                                        $sbj = '';
+                                       if ($debug) echo "subj empty<br>";
                                }else{
                                        //if we can't find referenced parent, 
it's a "stray"
                                        $strays[$id] = $new['IN-REPLY-TO'];
+                                       if ($debug) echo "it's a stray<br>";
                                }
                        }
+                       //zago & cits, 10/5/06, messages without $has_re, in 
reply to:
+                       else
+                         {
+
+                           if ($debug) echo "z&c: it's a stray<br>";
+                           if ($debug) echo "z&c added to root\n";
+                           $roots[$sbj] = $id;
+                           $root_in_root[$id] = !$has_re;
+                           $sub_mids[$new['MESSAGE-ID']] = $id;
+                           $result[$id] = array($id);
+
+                         }
+                       //END zago & cits, 10/5/06, messages without $has_re, 
in reply to:
                        
                        //add subject as root
                        if ($sbj){
@@ -1061,11 +1077,13 @@
                                $sub_mids[$new['MESSAGE-ID']] = $id;
                                $result[$id] = array($id);
                        }
-                       if ($debug) echo $new['MESSAGE-ID']."\t".$sbj."\n";
+                       else
+                         if ($debug) echo "NOT added to root --$sbj--<br>";
+
+                       if ($debug) echo "message id: 
".$new['MESSAGE-ID']."\t".$sbj."\n";
                }
                        
        }
-       
        //now that we've gone through all the messages,
        //go back and try and link up the stray threads
        if (count($strays)>0){
@@ -1077,6 +1095,7 @@
                }
        }
        
+
        if ($clock) $clock->register('data prepped');
        
        if ($debug) print_r($roots);
@@ -2032,4 +2051,3 @@
 }
 
 ?>
-

Reply via email to