Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't fetch plain text mails content using IMAP

Tags:

php

email

imap

I am reading mails from a specific mail id using IMAP function.But i am not able to read the mail content for plain text mails. It ‘s s working perfect for HTML Mails. After running the code all plain text mails remains as unread and html mails marked as read and the other things like sender mail id and subject i can read.Only the problem is with reading the content. Here is the code which i have tried

    include('imap.php');
    $hostname = '{xxx.org:143/novalidate-cert}INBOX';
    $username = '[email protected]';
    $password = 'xxxxx';
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to : ' . imap_last_error());
    $emails = imap_search($inbox,'UNSEEN');

    if($emails) {
      $output = '';
      rsort($emails);
      foreach($emails as $email_number) {
        $structure = imap_fetchstructure($inbox, $email_number); 
            $savedir = dirname(__FILE__).'/uploads/';
                    $attachments = array();
                    if(isset($structure->parts) && count($structure->parts)) {

                        for($i = 0; $i < count($structure->parts); $i++) {

                            $attachments[$i] = array(
                                'is_attachment' => false,
                                'filename' => '',
                                'name' => '',
                                'attachment' => ''
                            );
                            if($structure->parts[$i]->ifdparameters) {
                                foreach($structure->parts[$i]->dparameters as $object) {
                                    if(strtolower($object->attribute) == 'filename') {
                                        $attachments[$i]['is_attachment'] = true;
                                        $attachments[$i]['filename'] = $object->value;
                                    }
                                }
                            }

                            if($structure->parts[$i]->ifparameters) {
                                foreach($structure->parts[$i]->parameters as $object) {
                                    if(strtolower($object->attribute) == 'name') {
                                        $attachments[$i]['is_attachment'] = true;
                                        $attachments[$i]['name'] = $object->value;
                                    }
                                }
                            }

                            if($attachments[$i]['is_attachment']) {
                                $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
                                if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
                                    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                                }
                                elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
                                    $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);



                                }

                                 $savepath = $savedir . $attachments[$i]['filename'];
                                file_put_contents($savepath, $attachments[$i]['attachment']);

                            }
                        }
                    }





                $name = $structure->parts[1]->dparameters[0]->value; 
                $overview = imap_fetch_overview($inbox,$email_number,0);
                 $msg = imap_fetchbody($inbox,$email_number,1.2); 

                 $message='';
                if($msg=='')
                {
                    $message = imap_fetchbody($inbox,$email_number,2.0);


                }else{
                 $message=$msg;

                 }


                 $sub=$overview[0]->subject;
                  $from=$overview[0]->from;
                  $arr = explode('<', $from);
                    $from_mail = $arr[1];
                    if($from_mail!='')
                    {
                        $from=str_replace('>','',$from_mail);
                    }


               $randstr='';
               srand((double)microtime()*1000000);

               $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
               while(strlen($randstr)<5) {
                  $randstr.=substr($chars,(rand()%(strlen($chars))),1);
               } 

Any one please help me... Thanks in advance

like image 527
Juice Avatar asked Jun 02 '12 03:06

Juice


1 Answers

Your problem is this line:

$msg = imap_fetchbody($inbox,$email_number,1.2); 

1.2 is TEXT/HTML email part, which is used for html email body.

1.1 is TEXT/PLAIN - plain text email body - for plain text messages you'll need to use this one.

like image 78
c2h5oh Avatar answered Oct 16 '22 10:10

c2h5oh