PHP处理postfix邮件内容的方法
本文实例讲述了PHP处理postfix邮件内容的方法。分享给大家供大家参考。具体如下:
<?php
//从输入读取到所有的邮件内容
$email="";
$fd=fopen("php://stdin","r");
while(!feof($fd)){
$email.=fread($fd,1024);
}
fclose($fd);
//记录所有的内容,测试
file_put_contents("/tmp/mail/".time(),$email);
//处理邮件
$lines=explode("\n",$email);
//emptyvars
$from="";
$date="";
$subject="";
$message="";
$splittingheaders=true;
for($i=0;$i<count($lines);$i++){
if($splittingheaders){
//lookoutforspecialheaders
if(preg_match("/^Subject:(.*)/",$lines[$i],$matches)){
$subject=$matches[1];
}
if(preg_match("/^From:(.*)/",$lines[$i],$matches)){
if(strpos($lines[$i],"<")){
//thenameexisttooinfromheader
$data=explode('<',$lines[$i]);
$from=substr(trim($data[1]),0,-1);
}else{
//onlythemail
$from=$matches[1];
}
}
if(preg_match("/^Date:(.*)/",$lines[$i],$matches)){
$date=$matches[1];
}
}else{
//notaheader,butmessage
$message.=$lines[$i]."\n";
}
if(trim($lines[$i])==""){
//emptyline,headersectionhasended
$splittingheaders=false;
}
}
$when=date("Y-m-dG:i:s");
$data=explode('@',$from);
$username=$data[0];
//记录到数据库
$sql="insertintomails(`username`,`from`,`subject`,`date`,`message`)values('$username','$from','$subject','$when','$message')";
//测试
file_put_contents("/tmp/mail2.log",$sql);
?>
希望本文所述对大家的php程序设计有所帮助。