Bug fixed where mails where nearly empty. HTML mails can now be received.
This commit is contained in:
parent
a74b0746b1
commit
01301a6169
|
@ -85,14 +85,27 @@ function email_get_msg($mbox,$uid) {
|
||||||
// file_put_contents($file, json_encode($struc));
|
// file_put_contents($file, json_encode($struc));
|
||||||
|
|
||||||
if(! $struc->parts) {
|
if(! $struc->parts) {
|
||||||
$ret['body'] = email_get_part($mbox,$uid,$struc,0);
|
$ret['body'] = email_get_part($mbox,$uid,$struc,0, 'html');
|
||||||
|
|
||||||
|
if (trim($ret['body']) == '')
|
||||||
|
$ret['body'] = email_get_part($mbox,$uid,$struc,0, 'plain');
|
||||||
|
else
|
||||||
|
$ret['body'] = html2bbcode($ret['body']);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
$text = '';
|
||||||
|
$html = '';
|
||||||
foreach($struc->parts as $ptop => $p) {
|
foreach($struc->parts as $ptop => $p) {
|
||||||
$x = email_get_part($mbox,$uid,$p,$ptop + 1);
|
$x = email_get_part($mbox,$uid,$p,$ptop + 1, 'plain');
|
||||||
if($x)
|
if($x) $text .= $x;
|
||||||
$ret['body'] = $x;
|
|
||||||
|
$x = email_get_part($mbox,$uid,$p,$ptop + 1, 'html');
|
||||||
|
if($x) $html .= $x;
|
||||||
}
|
}
|
||||||
|
if (trim($html) != '')
|
||||||
|
$ret['body'] = html2bbcode($html);
|
||||||
|
else
|
||||||
|
$ret['body'] = $text;
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
@ -100,78 +113,81 @@ function email_get_msg($mbox,$uid) {
|
||||||
// At the moment - only return plain/text.
|
// At the moment - only return plain/text.
|
||||||
// Later we'll repackage inline images as data url's and make the HTML safe
|
// Later we'll repackage inline images as data url's and make the HTML safe
|
||||||
|
|
||||||
function email_get_part($mbox,$uid,$p,$partno) {
|
function email_get_part($mbox,$uid,$p,$partno, $subtype) {
|
||||||
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
|
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
|
||||||
global $htmlmsg,$plainmsg,$charset,$attachments;
|
global $htmlmsg,$plainmsg,$charset,$attachments;
|
||||||
|
|
||||||
//echo $partno;
|
//echo $partno."\n";
|
||||||
|
|
||||||
// DECODE DATA
|
// DECODE DATA
|
||||||
$data = ($partno)
|
$data = ($partno)
|
||||||
? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
|
? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
|
||||||
: @imap_body($mbox,$uid,FT_UID|FT_PEEK);
|
: @imap_body($mbox,$uid,FT_UID|FT_PEEK);
|
||||||
|
|
||||||
// for testing purposes: Collect imported mails
|
// for testing purposes: Collect imported mails
|
||||||
// $file = tempnam("/tmp/friendica2/", "mail-body-");
|
// $file = tempnam("/tmp/friendica2/", "mail-body-");
|
||||||
// file_put_contents($file, $data);
|
// file_put_contents($file, $data);
|
||||||
|
|
||||||
// Any part may be encoded, even plain text messages, so check everything.
|
// Any part may be encoded, even plain text messages, so check everything.
|
||||||
if ($p->encoding==4)
|
if ($p->encoding==4)
|
||||||
$data = quoted_printable_decode($data);
|
$data = quoted_printable_decode($data);
|
||||||
elseif ($p->encoding==3)
|
elseif ($p->encoding==3)
|
||||||
$data = base64_decode($data);
|
$data = base64_decode($data);
|
||||||
|
|
||||||
// PARAMETERS
|
// PARAMETERS
|
||||||
// get all parameters, like charset, filenames of attachments, etc.
|
// get all parameters, like charset, filenames of attachments, etc.
|
||||||
$params = array();
|
$params = array();
|
||||||
if ($p->parameters)
|
if ($p->parameters)
|
||||||
foreach ($p->parameters as $x)
|
foreach ($p->parameters as $x)
|
||||||
$params[strtolower($x->attribute)] = $x->value;
|
$params[strtolower($x->attribute)] = $x->value;
|
||||||
if ($p->dparameters)
|
if (isset($p->dparameters) and $p->dparameters)
|
||||||
foreach ($p->dparameters as $x)
|
foreach ($p->dparameters as $x)
|
||||||
$params[strtolower($x->attribute)] = $x->value;
|
$params[strtolower($x->attribute)] = $x->value;
|
||||||
|
|
||||||
// ATTACHMENT
|
// ATTACHMENT
|
||||||
// Any part with a filename is an attachment,
|
// Any part with a filename is an attachment,
|
||||||
// so an attached text file (type 0) is not mistaken as the message.
|
// so an attached text file (type 0) is not mistaken as the message.
|
||||||
|
|
||||||
if ($params['filename'] || $params['name']) {
|
if ((isset($params['filename']) and $params['filename']) || (isset($params['name']) and $params['name'])) {
|
||||||
// filename may be given as 'Filename' or 'Name' or both
|
// filename may be given as 'Filename' or 'Name' or both
|
||||||
$filename = ($params['filename'])? $params['filename'] : $params['name'];
|
$filename = ($params['filename'])? $params['filename'] : $params['name'];
|
||||||
// filename may be encoded, so see imap_mime_header_decode()
|
// filename may be encoded, so see imap_mime_header_decode()
|
||||||
$attachments[$filename] = $data; // this is a problem if two files have same name
|
$attachments[$filename] = $data; // this is a problem if two files have same name
|
||||||
}
|
}
|
||||||
|
|
||||||
// TEXT
|
// TEXT
|
||||||
if ($p->type == 0 && $data) {
|
if ($p->type == 0 && $data) {
|
||||||
// Messages may be split in different parts because of inline attachments,
|
// Messages may be split in different parts because of inline attachments,
|
||||||
// so append parts together with blank row.
|
// so append parts together with blank row.
|
||||||
if (strtolower($p->subtype)=='plain')
|
if (strtolower($p->subtype)==$subtype) {
|
||||||
return (trim($data) ."\n\n");
|
$data = iconv($params['charset'], 'UTF-8//IGNORE', $data);
|
||||||
else
|
return (trim($data) ."\n\n");
|
||||||
|
} else
|
||||||
$data = '';
|
$data = '';
|
||||||
|
|
||||||
// $htmlmsg .= $data ."<br><br>";
|
// $htmlmsg .= $data ."<br><br>";
|
||||||
$charset = $params['charset']; // assume all parts are same charset
|
$charset = $params['charset']; // assume all parts are same charset
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMBEDDED MESSAGE
|
// EMBEDDED MESSAGE
|
||||||
// Many bounce notifications embed the original message as type 2,
|
// Many bounce notifications embed the original message as type 2,
|
||||||
// but AOL uses type 1 (multipart), which is not handled here.
|
// but AOL uses type 1 (multipart), which is not handled here.
|
||||||
// There are no PHP functions to parse embedded messages,
|
// There are no PHP functions to parse embedded messages,
|
||||||
// so this just appends the raw source to the main message.
|
// so this just appends the raw source to the main message.
|
||||||
// elseif ($p->type==2 && $data) {
|
// elseif ($p->type==2 && $data) {
|
||||||
// $plainmsg .= $data."\n\n";
|
// $plainmsg .= $data."\n\n";
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// SUBPART RECURSION
|
// SUBPART RECURSION
|
||||||
if ($p->parts) {
|
if (isset($p->parts) and $p->parts) {
|
||||||
foreach ($p->parts as $partno0=>$p2) {
|
$x = "";
|
||||||
$x = email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1)); // 1.2, 1.2.1, etc.
|
foreach ($p->parts as $partno0=>$p2) {
|
||||||
if($x)
|
$x .= email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1), $subtype); // 1.2, 1.2.1, etc.
|
||||||
return $x;
|
//if($x)
|
||||||
|
// return $x;
|
||||||
}
|
}
|
||||||
}
|
return $x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue