通过smtp发邮件由于邮箱是错的或者是接受者设置了黑名单/邮箱已满等原因 导致退信我要通过imap读取如QQ邮箱经测试 我没有读取到附件中的eml文件 此邮件为发送的原邮件如何解决  附:163和sohu的都有类似问题发过一次这个帖子 尽然没有人回 悲哀啊这次加分

解决方案 »

  1.   

    <?php
    /**
     * IMAP基本操作
     */
    defined('IN_EDM') || exit('Access Denied');
    class ImapBase{ public $imapserver = '';       //IMAP服务器
    public $username   = '';       //用户名
    public $password   = '';       //密码
    public $imap       = null;     //IMAP流
    public $mailboxs   = array();  //邮箱中的分类目录       /**
         * 初始化
         */
        function __construct($imapserver, $username, $password) {

    $this->imapserver = $imapserver;
    $this->username = $username;
    $this->password = $password;    } /**
     *  imap连接
     */
    function open_imap(){
    $this->imap = imap_open('{'.$this->imapserver.':143/novalidate-cert}', "$this->username", "$this->password");
    } /**
     * mailbox列表
     */
    function mailboxs_list(){ $mailboxs = imap_list($this->imap, '{'.$this->imapserver.':143/novalidate-cert}', "*"); if(is_array($mailboxs)){

    foreach($mailboxs as $key=>$value){ if(stripos($value, 'novalidate-cert') !== false){
    $tmparr = explode('}', $value);
    $mailboxs[$key] = trim($tmparr[1]);
    }
    }
    } $this->mailboxs = $mailboxs;
    } function close_imap(){ imap_close($this->imap);
    } /**
     * 打开mailbox
     */
    function open_mailbox($mailbox){ return imap_open('{'.$this->imapserver.':143/novalidate-cert}'.$mailbox, "$this->username", "$this->password");
    } /**
     * maibox中的邮件数
     */
    function mailnum($mailbox){ return imap_num_msg($mailbox);
    } /**
     * 获取邮件内容
     */
     function get_mail(){  //连接IMAP
    $this->open_imap(); //获取mailbox
    $this->mailboxs_list(); //连接mailboxs
    if($this->mailboxs && is_array($this->mailboxs)){ foreach($this->mailboxs as $value){ $mailbox = $this->open_mailbox($value); $mailnum = $this->mailnum($mailbox); if($mailnum > 0){ for($i=1; $i<=$mailnum; $i++){
    $body = array(); $body[] = imap_fetchbody($mailbox, $i, 0);
    $body[] = imap_fetchbody($mailbox, $i, 1);
    $body[] = imap_fetchbody($mailbox, $i, 2);
    $body[] = imap_fetchbody($mailbox, $i, 3);
    $body[] = imap_fetchbody($mailbox, $i, 4); test($body);
    $structure = imap_fetchstructure($mailbox, $i); test($structure); $parts = $structure->parts; for($j = 1; $j < count($parts); $j++){ $part = $parts[$i]; test($part, false); }
    }
    }
    }
    } //关闭IMAP
    $this->close_imap();
     }
    }
      

  2.   

    删除操作还没有测试的 目前是读不到附件中eml格式的文件内容