PHP 从邮箱抓取附件

2023-05-12365

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;

    }


上一篇:EasyAdmin 下一篇:离线安装nginx + php