SSilence / php-imap-client

a easy solution for simple IMAP email access in php
MIT License
268 stars 138 forks source link

$imap->getMessages() failing with no error #237

Open cbielich opened 5 years ago

cbielich commented 5 years ago

I was having issue primarily with Outlook emails where for some reason a random email would get stuck and my script would just die. No errors at all. Just when it tried to access that message with $imap->getMessages() it just died so I went through some digging and "think" I fixed my issue because it worked and the email was being brought in, but I have truly no idea why it worked but let me explain what I did and maybe you can figure it out.

In 'IncomingMessage.php' in line 370 you have

        if (!isset($objNew->$subtype)) {    
            $objNew->$subtype = $obj;
        } else {
            $subtype = $subtype.'_'.$i;
            $objNew->$subtype = $obj;
            $i++;
        }

What was happening is there were 3 $objNew->$subtype that it was trying to loop through, but on the third time it would die. So I changed it to this

        if (!isset($objNew->$subtype)) {    
    if (trim($obj) == '') {
        $subtype = $subtype.'_'.$i;
        $i++;
    }
            $objNew->$subtype = $obj;
        } else {
            $subtype = $subtype.'_'.$i;
            $objNew->$subtype = $obj;
            $i++;
        }

The reason I came up with this was that even though the third time if (!isset($objNew->$subtype)) { would trigger as true the object coming in was blank. So I thought adding the $subtype = $subtype.'_'.$i; and $i++; since it seemed to be a false positive.

Again I have no idea how this worked, it just did. Hoping someone can take a look and see something I am not.

redanefzi commented 5 years ago

i have the same problem using $imap->getMessages(); Error: mb_convert_encoding(): Illegal character encoding specified

mcki0127 commented 4 years ago

Same here. Line 400 of IncomingMessage.php is failing:

$objNew->text = quoted_printable_decode(mb_convert_encoding( $objNew->plain, "utf-8", $objNew->plain->charset ));