Hi there everyone!
I’m trying my best to Google my way through this issue, but have run into an issue I can’t out-Google. I’m trying to write a script that is receiving an email, breaking it apart into it’s various components and then storing into a database. I would like to store:
from name
from email
to name
to email
subject
headers
body
Here’s what I’ve cobbled together from various tutorials and demo’s:
$fd = fopen("php://stdin", "r");
$email_content = "";
while (!feof($fd)) {
$email_content .= fread($fd, 1024);
}
fclose($fd);
//split the string into array of strings, each of the string represents a single line, received
$lines = explode("\
", $email_content);
// initialize variable which will assigned later on
$from = "";
$subject = "";
$headers = "";
$message = "";
$is_header= true;
//loop through each line
for ($i=0; $i < count($lines); $i++) {
if ($is_header) {
// hear information. instead of main message body, all other information are here.
$headers .= $lines[$i]."\
";
// Split out the To portion
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
$to = $matches[1];
}
$toregexp = '/To:\\s*(([^\\<]*?) <)?<?(.+?)>?\\s*\
/i';
if(preg_match($toregexp, $email_content, $to_dissection)) {
$toname = $to_dissection[2];
$toemail = $to_dissection[3];
}
// Split out the subject portion
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject = $matches[1];
}
//Split out the sender information portion
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
$from = $matches[1];
}
$fromregexp = '/From:\\s*(([^\\<]*?) <)?<?(.+?)>?\\s*\
/i';
if(preg_match($fromregexp, $email_content, $from_dissection)) {
$fromname = $from_dissection[2];
$fromemail = $from_dissection[3];
}
} else {
// content/main message body information
$message .= $lines[$i]."\
";
}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$is_header = false;
}
}
My issues are many. I’ve got from and to names that don’t reflect the true data,
the from address will be the original sender and not the most recent sender if
it’s forwa