का उपयोग करते समय मैं इस PHP IMAP क्लास का उपयोग कर रहा हूं: http://code.google.com/p/php-imap/source/browse/trunk/ImapMailbox.php वर्तमान प्रोजेक्ट पर। कुछ संशोधनों के बाद कक्षा काम कर रही है। हालांकि जब भी कक्षा डाउनलोड करता है। डॉक्स फाइलें वे हमेशा भ्रष्ट होती हैं और उन्हें कार्यालय द्वारा पुनर्प्राप्त करना होता है।भ्रष्ट .docx फ़ाइलें जब एक PHP IMAP वर्ग
protected function initMailPart(IncomingMail $mail, $partStruct, $partNum) {
$data = $partNum ? $this->imap_fetchbody($this->mbox, $mail->mId, $partNum, FT_UID) : $this->imap_body($this->mbox, $mail->mId, FT_UID);
if($partStruct->encoding == 1) {
$data = $this->imap_utf8($data);
}
elseif($partStruct->encoding == 2) {
$data = $this->imap_binary($data);
}
elseif($partStruct->encoding == 3) {
$data = $this->imap_base64($data);
}
elseif($partStruct->encoding == 4) {
$data = $this->imap_qprint($data);
}
$data = trim($data);
$params = array();
if(!empty($partStruct->parameters)) {
foreach($partStruct->parameters as $param) {
$params[strtolower($param->attribute)] = $param->value;
}
}
if(!empty($partStruct->dparameters)) {
foreach($partStruct->dparameters as $param) {
$params[strtolower($param->attribute)] = $param->value;
}
}
if(!empty($params['charset'])) {
$data = iconv($params['charset'], $this->serverEncoding, $data);
}
// attachments
if($this->attachmentsDir) {
$filename = false;
$attachmentId = $partStruct->ifid ? trim($partStruct->id, " <>") : null;
if(empty($params['filename']) && empty($params['name']) && $attachmentId) {
$filename = $attachmentId . '.' . strtolower($partStruct->subtype);
}
elseif(!empty($params['filename']) || !empty($params['name'])) {
$filename = !empty($params['filename']) ? $params['filename'] : $params['name'];
$filename = $this->decodeMimeStr($filename);
$filename = $this->quoteAttachmentFilename($filename);
}
if($filename) {
if($this->attachmentsDir) {
$filepath = rtrim($this->attachmentsDir, '/\\') . DIRECTORY_SEPARATOR . $filename;
file_put_contents($filepath, $data);
$mail->attachments[$filename] = $filepath;
}
else {
$mail->attachments[$filename] = $filename;
}
if($attachmentId) {
$mail->attachmentsIds[$filename] = $attachmentId;
}
}
}
if($partStruct->type == 0 && $data) {
if(strtolower($partStruct->subtype) == 'plain') {
$mail->textPlain .= $data;
}
else {
$mail->textHtml .= $data;
}
}
elseif($partStruct->type == 2 && $data) {
$mail->textPlain .= trim($data);
}
if(!empty($partStruct->parts)) {
foreach($partStruct->parts as $subpartNum => $subpartStruct) {
$this->initMailPart($mail, $subpartStruct, $partNum . '.' . ($subpartNum + 1));
}
}
}
protected function decodeMimeStr($string, $charset = 'UTF-8') {
$newString = '';
$elements = $this->imap_mime_header_decode($string);
for($i = 0; $i < count($elements); $i++) {
if($elements[$i]->charset == 'default') {
$elements[$i]->charset = 'iso-8859-1';
}
$newString .= iconv($elements[$i]->charset, $charset, $elements[$i]->text);
}
return $newString;
}
अनुलग्नक प्रारूप को दो बार जांचें। क्या वे दस्तावेज़ हमेशा एक विशिष्ट ईमेल क्लाइंट से जुड़े होते हैं (उदाहरण के लिए माइक्रोसॉफ्ट आउटलुक?)। – hakre
वे निश्चित रूप से हैं। डॉक्स को 2007 से सहेजा गया है और यह वही है जब ईमेल जीमेल, आउटलुक 2007 और हॉटमेल – Chardard
से भेजे जाते हैं, जानना अच्छा है! क्या आप संलग्न करने से पहले और उसके बाद एमडी 5 चेकसम बना सकते हैं? फ़ाइल आकार भी भिन्न होता है? इसके अलावा मैं परीक्षण उद्देश्यों के लिए फ़ाइल के कई संस्करणों को अलग-अलग एन्कोडिंग के साथ सहेज दूंगा। मैं वहां कुछ गंध करता हूं, लेकिन स्वाभाविक रूप से कोड को स्कैन करने से बस कहना मुश्किल है। आपके पास खाली वर्णमाला पर कुछ निर्णय हैं और ऐसे में, शायद वहां कुछ गड़बड़ है। – hakre