无法使用IMAP获取纯文本邮件内容 [英] Can't fetch plain text mails content using IMAP

查看:704
本文介绍了无法使用IMAP获取纯文本邮件内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 IMAP 函数从特定邮件ID中读取邮件。但是,我无法读取纯文本的邮件内容邮件。这对于 HTML邮件是非常有用的。运行代码后,所有纯文本邮件仍然是未读的,html邮件标记为已读,其他的东西像发件人邮件ID和主题我可以读取。只有问题在于阅读内容。这是我尝试过的代码

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 = 'xxx-xxx@xx.org';
    $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

推荐答案

您的问题是这一行:

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

1.2是TEXT / HTML电子邮件部分,用于html电子邮件正文。

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

1.1是TEXT / PLAIN - 纯文本电子邮件正文 - 对于纯文本消息,您需要使用此文本。

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

这篇关于无法使用IMAP获取纯文本邮件内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆