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;
}