Commit 98957486 authored by mku's avatar mku

ZP-364 #comment Forwarding an email loses attachments #time 6h

git-svn-id: https://z-push.org/svn/z-push/trunk@1695 b7dd7b3b-3a3c-0410-9da9-bee62a6cc5b5
parent 47fc0fd1
...@@ -627,61 +627,60 @@ class MAPIProvider { ...@@ -627,61 +627,60 @@ class MAPIProvider {
foreach($rows as $row) { foreach($rows as $row) {
if(isset($row[PR_ATTACH_NUM])) { if(isset($row[PR_ATTACH_NUM])) {
$mapiattach = mapi_message_openattach($mapimessage, $row[PR_ATTACH_NUM]); if (Request::GetProtocolVersion() >= 12.0) {
$attach = new SyncBaseAttachment();
}
else {
$attach = new SyncAttachment();
}
$attachprops = mapi_getprops($mapiattach, array(PR_ATTACH_LONG_FILENAME, PR_ATTACH_FILENAME, PR_ATTACHMENT_HIDDEN, PR_ATTACH_CONTENT_ID, PR_ATTACH_CONTENT_ID_W, PR_ATTACH_MIME_TAG, PR_ATTACH_MIME_TAG_W)); $mapiattach = mapi_message_openattach($mapimessage, $row[PR_ATTACH_NUM]);
$attachprops = mapi_getprops($mapiattach, array(PR_ATTACH_LONG_FILENAME, PR_ATTACH_FILENAME, PR_ATTACHMENT_HIDDEN, PR_ATTACH_CONTENT_ID, PR_ATTACH_CONTENT_ID_W, PR_ATTACH_MIME_TAG, PR_ATTACH_MIME_TAG_W, PR_ATTACH_METHOD, PR_DISPLAY_NAME, PR_DISPLAY_NAME_W, PR_ATTACH_SIZE));
$stream = mapi_openpropertytostream($mapiattach, PR_ATTACH_DATA_BIN); // the displayname is handled equaly for all AS versions
if($stream) { $attach->displayname = w2u((isset($attachprops[PR_ATTACH_LONG_FILENAME])) ? $attachprops[PR_ATTACH_LONG_FILENAME] : ((isset($attachprops[PR_ATTACH_FILENAME])) ? $attachprops[PR_ATTACH_FILENAME] : ((isset($attachprops[PR_DISPLAY_NAME])) ? $attachprops[PR_DISPLAY_NAME] : "attachment.bin")));
$stat = mapi_stream_stat($stream); // fix attachment name in case of inline images
if ($attach->displayname == "inline.txt" && (isset($attachprops[PR_ATTACH_MIME_TAG]) || $attachprops[PR_ATTACH_MIME_TAG_W])) {
$mimetype = (isset($attachprops[PR_ATTACH_MIME_TAG])) ? $attachprops[PR_ATTACH_MIME_TAG]:$attachprops[PR_ATTACH_MIME_TAG_W];
$mime = explode("/", $mimetype);
if (Request::GetProtocolVersion() >= 12.0) { if (count($mime) == 2 && $mime[0] == "image") {
$attach = new SyncBaseAttachment(); $attach->displayname = "inline." . $mime[1];
}
else {
$attach = new SyncAttachment();
} }
}
// the displayname is handled equal for all AS versions // set AS version specific parameters
$attach->displayname = w2u((isset($attachprops[PR_ATTACH_LONG_FILENAME])) ? $attachprops[PR_ATTACH_LONG_FILENAME] : ((isset($attachprops[PR_ATTACH_FILENAME])) ? $attachprops[PR_ATTACH_FILENAME] : "attachment.bin")); if (Request::GetProtocolVersion() >= 12.0) {
$attach->filereference = $entryid.":".$row[PR_ATTACH_NUM];
// fix attachment name in case of inline images $attach->method = (isset($attachprops[PR_ATTACH_METHOD])) ? $attachprops[PR_ATTACH_METHOD] : ATTACH_BY_VALUE;
if ($attach->displayname == "inline.txt" && (isset($attachprops[PR_ATTACH_MIME_TAG]) || $attachprops[PR_ATTACH_MIME_TAG_W])) {
$mimetype = (isset($attachprops[PR_ATTACH_MIME_TAG]))?$attachprops[PR_ATTACH_MIME_TAG]:$attachprops[PR_ATTACH_MIME_TAG_W];
$mime = explode("/", $mimetype);
if (count($mime) == 2 && $mime[0] == "image") { // if displayname does not have the eml extension for embedde messages, android and WP devices won't open it
$attach->displayname = "inline." . $mime[1]; if ($attach->method == ATTACH_EMBEDDED_MSG) {
} if (strtolower(substr($attach->displayname, -4)) != '.eml')
$attach->displayname .= '.eml';
} }
$attach->estimatedDataSize = $attachprops[PR_ATTACH_SIZE];
// set AS version specific parameters if (isset($attachprops[PR_ATTACH_CONTENT_ID]) && $attachprops[PR_ATTACH_CONTENT_ID])
if (Request::GetProtocolVersion() >= 12.0) { $attach->contentid = $attachprops[PR_ATTACH_CONTENT_ID];
$attach->filereference = $entryid.":".$row[PR_ATTACH_NUM];
$attach->method = 1;
$attach->estimatedDataSize = $stat["cb"];
if (isset($attachprops[PR_ATTACH_CONTENT_ID]) && $attachprops[PR_ATTACH_CONTENT_ID]) if (!isset($attach->contentid) && isset($attachprops[PR_ATTACH_CONTENT_ID_W]) && $attachprops[PR_ATTACH_CONTENT_ID_W])
$attach->contentid = $attachprops[PR_ATTACH_CONTENT_ID]; $attach->contentid = $attachprops[PR_ATTACH_CONTENT_ID_W];
if (!isset($attach->contentid) && isset($attachprops[PR_ATTACH_CONTENT_ID_W]) && $attachprops[PR_ATTACH_CONTENT_ID_W]) if (isset($attachprops[PR_ATTACHMENT_HIDDEN]) && $attachprops[PR_ATTACHMENT_HIDDEN]) $attach->isinline = 1;
$attach->contentid = $attachprops[PR_ATTACH_CONTENT_ID_W];
if (isset($attachprops[PR_ATTACHMENT_HIDDEN]) && $attachprops[PR_ATTACHMENT_HIDDEN]) $attach->isinline = 1; if(!isset($message->asattachments))
$message->asattachments = array();
if(!isset($message->asattachments)) array_push($message->asattachments, $attach);
$message->asattachments = array(); }
else {
array_push($message->asattachments, $attach); $attach->attsize = $attachprops[PR_ATTACH_SIZE];
} $attach->attname = $entryid.":".$row[PR_ATTACH_NUM];
else { if(!isset($message->attachments))
$attach->attsize = $stat["cb"]; $message->attachments = array();
$attach->attname = $entryid.":".$row[PR_ATTACH_NUM];
if(!isset($message->attachments))
$message->attachments = array();
array_push($message->attachments, $attach); array_push($message->attachments, $attach);
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment