パイプ受信メールを処理し、ヘッダー、ボディを分割し、ヘッダーを分割して簡単に件名とスタッフを集めるPHPクラスがあるのだろうかと思います。受信メールを処理して解析するライブラリはありますか?
お勧めですか?
おかげ
パイプ受信メールを処理し、ヘッダー、ボディを分割し、ヘッダーを分割して簡単に件名とスタッフを集めるPHPクラスがあるのだろうかと思います。受信メールを処理して解析するライブラリはありますか?
お勧めですか?
おかげ
class HTMLParserIterator
{
var $contents;
var $pos=0;
var $endPos=0;
function HTMLParserIterator($contents)
{
$this->contents=$contents;
$this->pos=0;
$this->endPos=strlen($contents);
}
function setPos($pos)
{
$this->pos=$pos;
}
function getPos()
{
return $this->pos;
}
function hasMore()
{
return $this->pos <$this->endPos;
}
function getChar()
{
return $this->hasMore()?$this->contents[$this->pos++]:'';
}
function peek()
{
return $this->hasMore()?$this->contents[$this->pos]:'';
}
function skip($num=1)
{
$this->pos=min($this->pos+$num,$this->endPos);
}
function getChars($num)
{
$out='';
$len=min($num,$this->endPos-$this->pos);
$out=substr($this->contents,$this->pos,$len);
$this->pos+=$len;
return $out;
}
function readUntil($until,$ignoreCase=true)
{
$end=$ignoreCase?stripos ($this->contents, $until ,$this->pos):strpos ($this->contents, $until ,$this->pos);
if($end===false)
{
$end=$this->endPos;
}
$out=substr($this->contents,$this->pos,$end-$this->pos);
$this->pos=$end;
return $out;
}
function skipWhiteSpace()
{
$out=0;
while($this->hasMore() && isWhiteSpace($this->contents[$this->pos]))
{
$out++;
$this->pos++;
}
return $out;
}
function match($str,$ignoreCase=true)
{
if(sWith($this->contents,$str,$ignoreCase,$this->pos))
{
$out=substr($this->contents,$this->pos,strlen($str));
$this->pos+=strlen($str);
return true;
}
return false;
}
}
define("HTMLParserTag_CONTENT",0);
define("HTMLParserTag_OPEN",1);
define("HTMLParserTag_CLOSE",2);
define("HTMLParserTag_STANDALONE",3);
define("HTMLParserTag_COMMENT",4);
define("HTMLParserTag_EXTENDED_COMMENT",5);
define("HTMLParserTag_SCRIPT",6);
define("HTMLParserTag_STYLE",7);
define("HTMLParserTag_TEXTAREA",8);
class HTMLParserSectionTag
{
var $type;
var $value;
var $attrs=Array();
function HTMLParserSectionTag(&$iterator)
{
if(($value= $iterator->match('<!--'))!==false)
{
$this->type=HTMLParserTag_EXTENDED_COMMENT;
$this->value=$iterator->readUntil('-->');
$iterator->skip(3);
}
else if(($value= $iterator->match('<!'))!==false)
{
$this->type=HTMLParserTag_COMMENT;
$this->value=$iterator->readUntil('>');
$iterator->skip(1);
}
else if(($value= $iterator->match('</'))!==false)
{
$this->type=HTMLParserTag_CLOSE;
$ch=$iterator->getChar();
$buffer='';
while($ch!='' && !isWhiteSpace($ch) && $ch!='>' && $ch!='/')
{
$this->value.=$ch;
$ch=$iterator->getChar();
}
if($this->value=='')
{
$this->value='<'.$ch;
$this->type=HTMLParserTag_CONTENT;
}
else if($ch=='/' && ($value= $iterator->match('>'))!==false)
{
}
else if($ch!='>')
{
$endOfTag=$this->readAttrs($iterator);
}
}
else if(($value= $iterator->match('<'))!==false)
{
$this->type=HTMLParserTag_OPEN;
$ch=$iterator->getChar();
$buffer='';
while($ch!='' && !isWhiteSpace($ch) && $ch!='>' && $ch!='/')
{
$this->value.=$ch;
$ch=$iterator->getChar();
}
if($this->value=='')
{
$this->value='<'.$ch;
$this->type=HTMLParserTag_CONTENT;
}
else if($ch=='/' && ($value= $iterator->match('>'))!==false)
{
$this->type=HTMLParserTag_STANDALONE;
}
else if($ch!='>')
{
$endOfTag=$this->readAttrs($iterator);
if($endOfTag=='/>')
{
$this->type=HTMLParserTag_STANDALONE;
}
}
}
else
{
$this->value=$iterator->readUntil('<');
$this->type=HTMLParserTag_CONTENT;
}
if($this->type==HTMLParserTag_OPEN && strtolower($this->value)=="script")
{
$this->readScript($iterator);
}
else if($this->type==HTMLParserTag_STANDALONE && strtolower($this->value)=="script")
{
$this->type=HTMLParserTag_SCRIPT;
$this->value='';
}
else if($this->type==HTMLParserTag_OPEN && strtolower($this->value)=="textarea")
{
$this->type=HTMLParserTag_TEXTAREA;
$this->readUntilEndTag($iterator,"textarea");
}
else if($this->type==HTMLParserTag_STANDALONE && strtolower($this->value)=="textarea")
{
$this->type=HTMLParserTag_TEXTAREA;
$this->value='';
}
else if($this->type==HTMLParserTag_OPEN && strtolower($this->value)=="style")
{
$this->type=HTMLParserTag_STYLE;
$this->readUntilEndTag($iterator,"style");
}
else if($this->type==HTMLParserTag_STANDALONE && strtolower($this->value)=="style")
{
$this->type=HTMLParserTag_STYLE;
$this->value='';
}
}
function readScript(&$iterator)
{
$this->type=HTMLParserTag_SCRIPT;
$this->readUntilEndTag($iterator,"script");
}
function readUntilEndTag(&$iterator,$tag)
{
$this->value='';
while ($iterator->hasMore())
{
$this->value.=$iterator->readUntil('</'.$tag);
if($iterator->match("</$tag>"))
{
return;
}
else
{
$pos=$iterator->getPos();
$section=new HTMLParserSectionTag($iterator);
if($section->type==HTMLParserTag_STANDALONE && strtolower($section->value)==$tag)
{
return;
}
else
{
$iterator->setPos($pos);
$this->value.=$iterator->getChar();
}
}
}
}
function getAttribute($name)
{
return array_key_exists($name,$this->attrs)?$this->attrs[$name]:null;
}
function readAttrs(&$iterator)
{
while($iterator->hasMore())
{
if($iterator->match('>'))
{
return '>';
}
else if($iterator->match('/>'))
{
return '/>';
}
$iterator->skipWhiteSpace();
$name='';
$value='';
$ch=$iterator->getChar();
while($ch!='' && !isWhiteSpace($ch) && $ch!='>' && $ch!='=')
{
if($ch=='/' && $iterator->peek()=='>')
{
$ch='/>';
$iterator->getChar();
break;
}
$name.=$ch;
$ch=$iterator->getChar();
}
if($ch=='>' || $ch=='/>')
{
$this->attrs[$name]=false;
return $ch;
}
$whitespace=(isWhiteSpace($ch)?1:0)+$iterator->skipWhiteSpace();
if($iterator->peek()=='=')
{
$ch='=';
$iterator->skip();
$whitespace=0;
}
$whitespace=$whitespace+$iterator->skipWhiteSpace();
$value=false;
if($iterator->peek()=='\'')
{
$iterator->skip();
$ch=$iterator->getChar();
while($ch!='\'')
{
$value.=$ch;
$ch=$iterator->getChar();
}
}
else if($iterator->peek()=='"')
{
$iterator->skip();
$ch=$iterator->getChar();
while($ch!='"')
{
$value.=$ch;
$ch=$iterator->getChar();
}
}
else
{
if($whitespace==0)
{
$value='';
$ch=$iterator->getChar();
while($ch!='' && !isWhiteSpace($ch) && $ch!='>' && $ch!='=')
{
if($ch=='/' && $iterator->peek()=='>')
{
$ch='/>';
$iterator->getChar();
break;
}
$value.=$ch;
$ch=$iterator->getChar();
}
if($ch=='>' || $ch=='/>')
{
$this->attrs[$name]=$value;
return $ch;
}
}
}
if($name!='')
{
$this->attrs[$name]=$value;
}
}
}
function isEntirelyWhiteSpace()
{
if(count($this->attrs)==0)
{
for($i=0;$i<strlen($this->value);$i++)
{
if(!isWhiteSpace($this->value[$i]))
{
return false;
}
}
return true;
}
else
{
return false;
}
}
/*
define("HTMLParserTag_CONTENT",0);
define("HTMLParserTag_OPEN",1);
define("HTMLParserTag_CLOSE",2);
define("HTMLParserTag_STANDALONE",3);
define("HTMLParserTag_COMMENT",4);
define("HTMLParserTag_EXTENDED_COMMENT",5);
define("HTMLParserTag_SCRIPT",6);
define("HTMLParserTag_STYLE",7);
define("HTMLParserTag_TEXTAREA",8);
*/
function getAttributesText()
{
$out='';
foreach($this->attrs as $name=>$value)
{
$out.=' '.$name;
if($value!==false)
{
$out.='="'.str_replace('"','"',$value).'"';
}
}
return $out;
}
function getContent()
{
$out='';
switch($this->type)
{
case HTMLParserTag_CONTENT:
{
$out=$this->value;
}
break;
case HTMLParserTag_OPEN:
case HTMLParserTag_STANDALONE:
{
$out='<'.$this->value;
$attr=$this->getAttributesText();
if($attr!='')
{
$out.=$attr.' ';
}
$out.=$this->type==HTMLParserTag_STANDALONE?'/>':'>';
}
break;
case HTMLParserTag_CLOSE:
{
$out='</'.$this->value.">";
}
break;
case HTMLParserTag_SCRIPT:
{
$out='<script';
$attr=$this->getAttributesText();
if($attr!='')
{
$out.=$attr.' ';
}
$out.='>'.$this->value."</script>";
}
break;
case HTMLParserTag_TEXTAREA:
{
$out='<textarea';
$attr=$this->getAttributesText();
if($attr!='')
{
$out.=$attr.' ';
}
$out.='>'.$this->value."</textarea>";
}
break;
case HTMLParserTag_STYLE:
{
$out='<style';
$attr=$this->getAttributesText();
if($attr!='')
{
$out.=$attr.' ';
}
$out.='>'.$this->value."</style>";
}
break;
case HTMLParserTag_COMMENT:
{
$out.='<!'.$this->value.">";
}
break;
case HTMLParserTag_EXTENDED_COMMENT:
{
$out.='<!--'.$this->value."-->";
}
break;
}
return $out;
}
function hasTagName($name)
{
$out=false;
switch($this->type)
{
case HTMLParserTag_OPEN:
case HTMLParserTag_STANDALONE:
case HTMLParserTag_CLOSE:
{
$out=strtolower($this->value)==strtolower($name);
}
break;
case HTMLParserTag_SCRIPT:
{
$out=strtolower($name)=='script';
}
break;
case HTMLParserTag_TEXTAREA:
{
$out=strtolower($name)=='textarea';
}
break;
case HTMLParserTag_STYLE:
{
$out=strtolower($name)=='style';
}
break;
case HTMLParserTag_COMMENT:
case HTMLParserTag_EXTENDED_COMMENT:
{
if(strtolower($name)=='~comment')
{
$out=true;
}
else if(sWith(strtolower($name),'~comment:'))
{
$out=$this->value==substr($name,strlen('~comment:'));
}
}
break;
case HTMLParserTag_CONTENT:
{
$out=strtolower($name)=='~content';
}
break;
default:
{
$out=false;
}
break;
}
return $out;
}
function removeAttributes($name)
{
$newAttrs=Array();
$name=strtolower($name);
foreach($this->attrs as $attrName=>$attrValue)
{
if(strtolower($name)!=strtolower($attrName))
{
$newAttrs[$attrName]=$attrValue;
}
}
$this->attrs=$newAttrs;
}
function removeAttributesStartingWith($name)
{
$newAttrs=Array();
$name=strtolower($name);
foreach($this->attrs as $attrName=>$attrValue)
{
if(!sWith(strtolower($attrName),strtolower($name)))
{
$newAttrs[$attrName]=$attrValue;
}
}
$this->attrs=$newAttrs;
}
function removeStyle($name)
{
$name=strtolower($name);
$styleKey='';
foreach($this->attrs as $attrName=>$attrValue)
{
if(strtolower($attrName)=='style')
{
$styleKey=$attrName;
}
}
if($styleKey!='')
{
$styleDef=new HTMLParserIteratorStyleDefintion($this->attrs[$styleKey]);
$styleDef->removeStyle($name);
$this->attrs[$styleKey]=$styleDef->getContent();
}
}
function removeStyleStartingWith($name)
{
$name=strtolower($name);
$styleKey='';
foreach($this->attrs as $attrName=>$attrValue)
{
if(strtolower($attrName)=='style')
{
$styleKey=$attrName;
}
}
if($styleKey!='')
{
$styleDef=new HTMLParserIteratorStyleDefintion($this->attrs[$styleKey]);
$styleDef->removeStyleStartingWith($name);
$this->attrs[$styleKey]=$styleDef->getContent();
}
}
function replaceSources($srcs)
{
foreach($this->attrs as $name=>$val)
{
if(strtolower($name)=='src' && array_key_exists($val,$srcs))
{
$this->attrs[$name]=$srcs[$val];
}
}
}
function getSources(&$srcs)
{
foreach($this->attrs as $name=>$val)
{
if(strtolower($name)=='src')
{
$srcs[$this->attrs[$name]]=true;
}
}
}
}
class HTMLParser
{
var $sections=Array();
function HTMLParser($contents)
{
$iterator=new HTMLParserIterator($contents);
$this->sections=Array();
while($iterator->hasMore())
{
$startPos=$iterator->getPos();
$section=new HTMLParserSectionTag($iterator);
$this->sections[]=$section;
if($startPos==$iterator->getPos())
{
break;
}
}
}
function getContent()
{
$out='';
foreach($this->sections as $section)
{
$out.=$section->getContent();
}
return $out;
}
function removeTags($name)
{
$newSections=Array();
foreach($this->sections as $section)
{
if(!$section->hasTagName($name))
{
$newSections[]=$section;
}
}
$this->sections=$newSections;
}
function removeAttributes($name)
{
for($i=0;$i<count($this->sections);$i++)
{
$this->sections[$i]->removeAttributes($name);
}
}
function removeAttributesStartingWith($name)
{
for($i=0;$i<count($this->sections);$i++)
{
$this->sections[$i]->removeAttributesStartingWith($name);
}
}
function removeStyle($name)
{
for($i=0;$i<count($this->sections);$i++)
{
$this->sections[$i]->removeStyle($name);
}
}
function removeStyleStartingWith($name)
{
for($i=0;$i<count($this->sections);$i++)
{
$this->sections[$i]->removeStyleStartingWith($name);
}
}
function removeSections($name)
{
$newSections=Array();
$openTags=0;
foreach($this->sections as $section)
{
if(!$section->hasTagName($name))
{
if($openTags==0)
{
$newSections[]=$section;
}
}
else
{
if($section->type==HTMLParserTag_OPEN)
{
$openTags++;
}
else if($section->type==HTMLParserTag_CLOSE && $openTags>0)
{
$openTags--;
}
}
}
$this->sections=$newSections;
}
function replaceSources($srcs)
{
foreach($this->sections as $id=>$section)
{
$this->sections[$id]->replaceSources($srcs);
}
}
function moveSources($basePath,$oldFolder,$newFolder)
{
$srcs=$this->getSources();
$newSrcs=Array();
foreach($srcs as $src=>$junk)
{
if(substr($src,0,strlen($oldFolder))==$oldFolder)
{
if(!file_exists($basePath.$newFolder))
{
mkdir($basePath.$newFolder);
}
$newSrc=$newFolder.substr($src,strlen($oldFolder));
rename($basePath.$src,$basePath.$newSrc);
$newSrcs[$src]=$newSrc;
}
}
$this->replaceSources($newSrcs);
}
function getSources()
{
$srcs=Array();
foreach($this->sections as $id=>$section)
{
$this->sections[$id]->getSources($srcs) ;
}
return $srcs;
}
function compact()
{
$newSections=Array();
$openTags=0;
foreach($this->sections as $section)
{
if(!$section->isEntirelyWhiteSpace())
{
$newSections[]=$section;
}
}
$this->sections=$newSections;
}
function removeUpto($name, $inclusive=false)
{
$newSections=Array();
$found=false;
foreach($this->sections as $section)
{
if(!$inclusive && $section->hasTagName($name))
{
$found=true;
}
if($found)
{
$newSections[]=$section;
}
if($inclusive && $section->hasTagName($name))
{
$found=true;
}
}
$this->sections=$newSections;
}
function removeAfter($name, $inclusive=false)
{
$newSections=Array();
$found=false;
foreach($this->sections as $section)
{
if($inclusive && $section->hasTagName($name))
{
$found=true;
}
if(!$found)
{
$newSections[]=$section;
}
if(!$inclusive && $section->hasTagName($name))
{
$found=true;
}
}
$this->sections=$newSections;
}
}
?>
EDITは:これは実際にあなたがしたい部分であり、上記の部分は、HTMLメールを解析します。
<?php
define('ATTACHMENT_UPLOAD_SERVER_DIRECTORY',dirname(__FILE__).'/storedimages');
define('ATTACHMENT_UPLOAD_WEB_DIRECTORY','storedimages');
if(!function_exists('randomString'))
{
function randomString($len,$chrs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
$out="";
for($i=0;$i<$len;$i++)
{
$out=$out.substr($chrs,rand()%strlen($chrs),1);
}
return $out;
}
}
class EmailDownloader
{
var $imageTypesAllowed=Array('JPEG'=>'.jpg','GIF'=>'.gif','PNG'=>'.png');
var $mbox = NULL; /* mailbox resource */
function EmailDownloader($username,$password,$mailserver='localhost',$servertype='pop',$port='default')
{
if($port=='default')
{
$imap_port='143';
$pop_port='110';
}
else
{
$imap_port=$port;
$pop_port=$port;
}
if($servertype=='pop')
{
$strconnect= '{'.$mailserver.':'.$pop_port. '/pop3}INBOX';
}
else if($servertype=='imap')
{
$strconnect= $strconnect='{'.$mailserver.':'.$imap_port. '}INBOX';
}
else
{
die("*** error, mailserver type should be either 'pop' or 'imap'\n");
}
$this->mbox=imap_open($strconnect,$username,$password);
}
function getEmails($deleteMessages=false,$attachmentLocationServer=ATTACHMENT_UPLOAD_SERVER_DIRECTORY,$attachmentLocationWeb=ATTACHMENT_UPLOAD_WEB_DIRECTORY)
{
$headers=imap_headers($this->mbox);
//print_r($headers);
$emails=Array();
for($idx=0,$mid=1;$idx<count($headers);$idx++,$mid++)
{
$tmpFolder='';
while ($tmpFolder=='')
{
$tmpFolder='/tmp_'.randomString(5,'abcdefghijklmnopqrstuvwxyz');
if(file_exists($attachmentLocationServer.$tmpFolder))
{
$tmpFolder='';
}
}
mkdir($attachmentLocationServer.$tmpFolder);
$images=Array();
$mail_header=imap_header($this->mbox,$mid);
$fromAddress=($mail_header->from[0]->mailbox).'@'.($mail_header->from[0]->host);
//print_r($mail_header);
// $message=imap_body($this->mbox,$mid); # yeah, not so simple, some voodoo needed
$mob=imap_fetchstructure($this->mbox,$mid);
if(($mob->type)==0)
{
// simple text message so, no problemo!
$message=imap_body($this->mbox,$mid);
}else
{
// oops, multipart message
// echo get_part($this->mbox, $mid, "MULTIPART");
$contentParts = count($mob->parts);
$message=get_part($this->mbox, $mid, "TEXT/HTML", $mob);
foreach($mob->parts as $nm=>$part)
{
if($part->type==5 ||$part->type==3)
{
$ext='';
if(array_key_exists($part->subtype,$this->imageTypesAllowed))
{
$ext=$this->imageTypesAllowed[$part->subtype];
}
if($ext=='' && $part->subtype=='OCTET-STREAM' && isset($part->dparameters))
{
$attFilename='';
foreach($part->dparameters as $dpara)
{
if($dpara->attribute=='FILENAME')
{
$attFilename=$dpara->value;
}
}
foreach($this->imageTypesAllowed as $allowedExt)
{
if(substr($attFilename,-strlen($allowedExt))== $allowedExt)
{
$ext=$allowedExt;
}
}
}
if($ext!='' )
{
$filename='';
while( $filename=='')
{
$filename=randomString(20,'abcdefghijklmnopqrstuvwxyz').$ext;
if(file_exists($attachmentLocationServer.$tmpFolder.'/'.$filename))
{
$filename='';
}
}
if($file=fopen($attachmentLocationServer.$tmpFolder.'/'.$filename,'w'))
{
fwrite($file,imap_base64(imap_fetchbody($this->mbox,$mid,$nm+1)));
fclose($file);
$images[str_replace(array('>','<'),array('','cid:'),$part->id)]=$attachmentLocationWeb.$tmpFolder.'/'.$filename;
}
}
}
}
}
$emails[]=Array('from'=>$fromAddress,'subject'=>$mail_header->Subject,'body'=>$message,'header'=>$mail_header,'images'=>$images,'tmp_folder'=>$tmpFolder);
if($deleteMessages)
{
imap_delete($this->mbox,$mid);
}
}
imap_expunge($this->mbox);
return $emails;
}
function close()
{
imap_close($this->mbox);
}
}
?>
<?
function get_mime_type(&$structure) {
$primary_mime_type = array("TEXT", "MULTIPART","MESSAGE", "APPLICATION", "AUDIO","IMAGE", "VIDEO", "OTHER");
if($structure->subtype) {
return $primary_mime_type[(int) $structure->type] . '/' .$structure->subtype;
}
return "TEXT/PLAIN";
}
function get_part($stream, $msg_number, $mime_type, $structure = false,$part_number = false) {
if(!$structure) {
$structure = imap_fetchstructure($stream, $msg_number);
}
if($structure) {
if($mime_type == get_mime_type($structure)) {
if(!$part_number) {
$part_number = "1";
}
$text = imap_fetchbody($stream, $msg_number, $part_number);
if($structure->encoding == 3) {
return imap_base64($text);
} else if($structure->encoding == 4) {
return imap_qprint($text);
} else {
return $text;
}
}
if($structure->type == 1) /* multipart */
{
$prefix ='';
while(list($index, $sub_structure) = each($structure->parts)) {
if($part_number) {
$prefix = $part_number . '.';
}
$data = get_part($stream, $msg_number, $mime_type, $sub_structure,$prefix . ($index + 1));
if($data) {
return $data;
}
} // END OF WHILE
} // END OF MULTIPART
} // END OF STRUTURE
return false;
} // END OF FUNCTION
?>
EDIT#2:ワン・モア・パート全体のプロセスを完了するために
<?php
define('RECEIVING_EMAIL_SERVER','mail.server.com');
define('RECEIVING_EMAIL_ACCOUNT','[email protected]');
define('RECEIVING_EMAIL_PASSWORD','myPasswordIsHere');
define('DELETE_MAIL_MESSAGES_FROM_SERVER',false);
define('USE_MYSQL_ESCAPE',false);
define('STORED_FOLDER_BASE',dirname(__FILE__).'/');
define('STORED_IMAGES_LOCATION','storedimages');
define('STORED_IMAGES_LOCATION_ABSOLUTE',STORED_FOLDER_BASE.STORED_IMAGES_LOCATION);
include_once('class.emaildownloader.php');
include_once('class.htmlparser.php');
$getEmail=new EmailDownloader(RECEIVING_EMAIL_ACCOUNT,RECEIVING_EMAIL_PASSWORD,RECEIVING_EMAIL_SERVER);
$emails=$getEmail->getEmails(DELETE_MAIL_MESSAGES_FROM_SERVER,STORED_IMAGES_LOCATION_ABSOLUTE,STORED_IMAGES_LOCATION);
$getEmail->close();
if($emails)
{
echo "EMAILS FOUND: ".count($emails)." <br />";
}
foreach($emails as $email)
{
echo "PARSING EMAIL<br />";
$parsedDoc=new HTMLParser($email['body']);
$parsedDoc->removeSections("script");
$parsedDoc->removeSections("style");
$parsedDoc->removeSections("head");
$parsedDoc->removeSections("applet");
$parsedDoc->removeSections("embed");
$parsedDoc->removeSections("object");
$parsedDoc->removeSections("iframe");
$parsedDoc->removeSections("select");
$parsedDoc->removeSections("option");
$parsedDoc->removeTags("noscript");
$parsedDoc->removeTags("html");
$parsedDoc->removeTags("body");
$parsedDoc->removeTags("~comment");
$parsedDoc->removeTags("input");
$parsedDoc->removeTags("link");
$parsedDoc->removeTags("form");
$parsedDoc->removeAttributes("background");
$parsedDoc->removeAttributes("bgcolor");
$parsedDoc->removeAttributesStartingWith("on");
$parsedDoc->removeStyleStartingWith('background');
$parsedDoc->compact();
if(count($email['images'])>0)
{
$parsedDoc->replaceSources($email['images']);
}
$subject=explode(' ',$email['subject']);
if(USE_MYSQL_ESCAPE)
{
$project_id=mysql_real_escape_string($subject[0]);
$page_id=mysql_real_escape_string($subject[1]);
}
else
{
$project_id=addSlashes($subject[0]);
$page_id=addSlashes($subject[1]);
}
echo "PARSING COMPLETE<br />";
}
?>
Zend_Mailを使用:具体的に
http://framework.zend.com/manual/en/zend.mail.html
: Zend_Mail_Storage
http://framework.zend.com/manual/en/zend.mail.read.html
注:全体のフレームワークを使用する必要はありません。あなたは必要なクラスだけを使うことができます。そのように設計されています。
うーん、私は、複数の独立した何かを好みます。 – Ryan
独立系?どういう意味ですか?あなたは私の言葉を取る必要はありません。 「Zend Frameworkは、PHP 5のためのオープンソースのオブジェクト指向のWebアプリケーションフレームワークです。Zend Frameworkは、多かれ少なかれ独立して使用できる疎結合のコンポーネントがたくさんあるので、しばしば「コンポーネントライブラリ」と呼ばれます。 " http://framework.zend.com/manual/en/learning.quickstart.intro.html –
そのコードは電子メールの解析とは関係ありません。 – Ryan
@David ...それは絶対にしています。これは、HTML電子メールを解析します(HTMLでない場合は、txtに戻ります)。送信者、ヘッダー、添付ファイル、および件名を読み取り、予想される着信対象を照合します。これは約4年前に書いたメールベースのCMSのクラスです。 – techtheatre
@David ...私の悪い、私は電子メール部分ではなくパーサ部分を投稿しました。私はちょうどそれを編集しました。もう一度チェックしてください(あなたの投票を取り戻してください...) – techtheatre