PHP 从邮箱抓取附件

public function index()
    {
       //存放地址 

       $fileSavePaht ='upload/gzb/';
       //imap服务地址
        $service="imap.sina.com";

       //邮箱地址
        $email="XXX@sina.com";

       //密码
        $password="******";
      
        
        $mailLink="{".$service.":143}INBOX" ; //imagp连接地址:不同主机地址不同
        $mailUser = "$email"; //邮箱用户名
        $mailPass = "$password"; //邮箱密码
        $mbox = imap_open($mailLink,$mailUser,$mailPass);
        if(!$mbox)
        {
            exit("no email");
        }
        else
        {
            //可以限制抓取的发件箱
            
            $from = array("xxxx@xxxx.com", "xxxxx@xxx.com.cn"); 
            foreach($from as $search){
                $msgs = imap_search($mbox, 'FROM "'.$search.'" UNSEEN');
                $numstr="";
                if(!empty($msgs))
                {
                    for($i=0;$i<count($msgs);$i++)
                    {
                        $msguid=$msgs[$i];

               //格式不一样,自行修改
                        if($search=="xxxx@xxxx.com")
                        {
                            $str = $this->GetAttach($mbox,$msguid, $fileSavePaht,11);
                        }
                        else
                        {
                            $str = $this->GetAttach($mbox,$msguid, $fileSavePaht,10);
                        }
                        
                        $numstr=$numstr.$msguid.",";
                    }
                    $numstr=substr($numstr,0,-1);
                    imap_setflag_full($mbox,$numstr,"\\Seen");
                }
            }
            imap_close($mbox, CL_EXPUNGE);
            exit("Yes");
        }
        
    }
    public function GetAttach($mbox,$mid,$path,$wei) { 
       

        $struckture = imap_fetchstructure($mbox, $mid);
        
        $ar = "";
        if (isset($struckture->parts)) {
            foreach ($struckture->parts as $key => $value) {
                $enc = $struckture->parts[$key]->encoding;
                if ($struckture->parts[$key]->subtype == 'OCTET-STREAM') {
                    
                    $name = base64_decode(substr($struckture->parts[$key]->parameters[0]->value,$wei));
                    
                    //$name = substr($name, 11); // 未知原因 base64解密以后字符串前边多了三个 乱码字符    截取7以后的字符串
                    if($wei==11)
                    {
                        $name = base64_decode(substr($struckture->parts[$key]->parameters[0]->value,$wei));
                        $name = iconv("GB2312", 'utf-8//IGNORE', $name);    
                    }
                    else
                    {
                        $name=$struckture->parts[$key]->parameters[0]->value;
                        $name=str_replace("=?UTF-8?B?","",$name);
                        $name = base64_decode($name);
                    }
                    
                    $message = imap_fetchbody($mbox, $mid, $key + 1);
                    switch ($enc) {
                        case 0:
                            $message = imap_8bit($message);
                            break;
                        case 1:
                            $message = imap_8bit($message);
                            break;
                        case 2:
                            $message = imap_binary($message);
                            break;
                        case 3:
                            $message = imap_base64($message);
                            break;
                        case 4:
                            $message = quoted_printable_decode($message);
                            break;
                        case 5:
                            $message = $message;
                            break;
                    }
                    
                   $fp = fopen($path . $name, "w+");
                    fwrite($fp, $message);
                    fclose($fp);
                    $ar = $ar . $name . ",";
                }
            }
            $ar = substr($ar, 0, (strlen($ar) - 1));
        }
        return $ar;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值