Skip to content
Snippets Groups Projects
Commit 3f04bca1 authored by Peter Rotich's avatar Peter Rotich
Browse files

Add EmailDataParser class - to be used by API.

parent c27bf65f
No related branches found
No related tags found
No related merge requests found
......@@ -15,8 +15,8 @@
vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/
require_once('Mail/mimeDecode.php');
require_once('Mail/RFC822.php');
require_once(PEAR_DIR.'Mail/mimeDecode.php');
require_once(PEAR_DIR.'Mail/RFC822.php');
class Mail_Parse {
......@@ -231,4 +231,94 @@ class Mail_Parse {
function parseAddressList($address){
return Mail_RFC822::parseAddressList($address, null, null,false);
}
function parse($rawemail) {
$parser= new Mail_Parse($rawemail);
return ($parser && $parser->decode())?$parser:null;
}
}
class EmailDataParser {
var $stream;
var $error;
function EmailDataParser($stream=null) {
$this->stream = $stream;
}
function parse($stream) {
$contents ='';
if(is_resource($stream)) {
while(!feof($stream))
$contents .= fread($stream, 8192);
} else {
$contents = $stream;
}
$parser= new Mail_Parse($contents);
if(!$parser->decode()) //Decode...returns false on decoding errors
return $this->err('Email parse failed ['.$parser->getError().']');
$data =array();
//FROM address: who sent the email.
if(($fromlist = $parser->getFromAddressList()) && !PEAR::isError($fromlist)) {
$from=$fromlist[0]; //Default.
foreach($fromlist as $fromobj) {
if(!Validator::is_email($fromobj->mailbox.'@'.$fromobj->host)) continue;
$from = $fromobj;
break;
}
$data['name'] = trim($from->personal,'"');
if($from->comment && $from->comment[0])
$data['name'].= ' ('.$from->comment[0].')';
$data['email'] = $from->mailbox.'@'.$from->host;
}
//TO Address:Try to figure out the email address... associated with the incoming email.
$emailId = 0;
if(($tolist = $parser->getToAddressList())) {
foreach ($tolist as $toaddr) {
if(($emailId=Email::getIdByEmail($toaddr->mailbox.'@'.$toaddr->host)))
break;
}
}
//maybe we got CC'ed??
if(!$emailId && ($cclist=$parser->getCcAddressList())) {
foreach ($cclist as $ccaddr) {
if(($emailId=Email::getIdByEmail($ccaddr->mailbox.'@'.$ccaddr->host)))
break;
}
}
$data['subject'] = Format::utf8encode($parser->getSubject());
$data['message'] = Format::utf8encode(Format::stripEmptyLines($parser->getBody()));
$data['header'] = $parser->getHeader();
$data['mid'] = $parser->getMessageId();
$data['priorityId'] = $parser->getPriority();
$data['emailId'] = $emailId;
//attachments XXX: worry about encoding??
$data['attachments'] = $parser->getAttachments();
return $data;
}
function err($error) {
$this->error = $error;
return false;
}
function getError() {
return $this->lastError();
}
function lastError() {
return $this->error;
}
}
?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment