2009-04-09 12 views
1

Ich habe ein seltsames Problem und bin mir nicht sicher, wie ich es beheben soll. Ich habe ein Skript in einem meiner Zend Framework-Controller erstellt, mit dem sich ein Administrator anmelden, ein PDF hochladen und als Anhang an alle senden kann, die die Mailing-Liste abonniert haben. Das Problem ist, dass einige Benutzer melden, dass sie den PDF-Anhang nicht öffnen können, dass die Datei beschädigt ist. Ich denke, das passiert nur AOL-Nutzern, aber ich bin nicht positiv. Sind Sie schon einmal auf dieses Problem gestoßen? Oder vielleicht ist es kein Problem mit AOL, aber etwas stimmt nicht mit meinem Code?Zend Framework: Einige E-Mail-Benutzer erhalten Fehler beim Öffnen von PDF-Anhängen?

Hier ist der Code, der die Arbeit macht:

Auch ich bin mit ZF-Version 1.6.0. Nicht sicher, ob das relevant ist.

//assuming the form is valid: 
$table = new Subscribers(); 
$rowset = $table->fetchAll(); 
foreach ($rowset as $row) { 
    $mail = new Zend_Mail(); 
    $mail->setBodyText($form->getElement('body')->getValue()) 
     ->setFrom('[email protected]', 'Weekly Update') 
     ->addTo($row->email) 
     ->setSubject($form->getElement('subject')->getValue()); 
    $fileLocation = $form->getElement('attachment')->getValue(); 
    $fileContents = file_get_contents($fileLocation); 
    $attachment = $mail->createAttachment($fileContents); 
    $attachment->filename = str_replace(Zend_Registry::get('config')->downloadsLocation . '/', '', $fileLocation);   
    $mail->send(); 
} 
+0

Sie diese Benutzer müssen Sie mit der Meldung zur Verfügung zu stellen Quelle, dann verschieben Sie das in ein Postfach und sehen, ob Sie es öffnen können. Abhängig von der Größe des Anhangs könnte es ein Problem usw. geben. – Till

Antwort

1

Es scheint (mir), dass in dieser Codezeile:

$attachment = $mail->createAttachment($fileContents); 

Sie wahrscheinlich Notwendigkeit, die zusätzliche Header-Informationen in der create Methode des Zend_Mail Rahmen hinzufügen ::

$attachment = $mail->createAttachment($fileContents, 
         Zend_Mime::DISPOSITION_INLINE); 

Viele größere E-Mail-Anbieter sind Verfechter für die strikte Einhaltung guter E-Mail-Richtlinien (ich habe gefunden).

Spielen Sie damit herum und ich bin sicher, Sie werden es zur Arbeit bekommen.

+0

würde das dazu führen, dass die Datei "beschädigt" wird? Das sagen meine Benutzer, wenn sie versuchen, es zu öffnen, dass die Datei beschädigt ist. – Andrew

+0

Der Fehler sagt normalerweise etwas wie "Adobe konnte die Datei nicht öffnen. Es kann beschädigt sein." Und ja, nicht richtige Mime-Typen können beeinflussen, wie der Inhalt vom Programm interpretiert wird. Manchmal wird es als eine wirklich lange Nachricht angezeigt, die abgeschnitten wird (dann beschädigt). – jerebear

+0

Ich habe ein wenig mehr über den MIME-Standard gelesen, also macht Ihre Antwort jetzt viel mehr Sinn, warum ich dieses Problem haben würde . Ich poste meinen Code, um anzuzeigen, was ich für bestimmte PDF-MIME-Dateien hinzufügen muss. Danke für Ihre Hilfe! – Andrew

0

Ich hatte auch dieses Problem.

Ich würde vorschlagen, dass Sie die Datei-Stream-Informationen irgendwie verfolgen. Das Problem mit meiner App war, dass der Anruf $fileContents = file_get_contents($fileLocation); den Stream der Datei nicht richtig abrufen konnte, also könnten Sie hier herunterfallen.

Versuchen Sie folgendes:

$mail = new Zend_Mail(); 
... 
var_dump($mail->send()); 

Sie sollten eine Reihe von Kauderwelsch sehen, wo die Datei-Stream unter dem Schlüssel in der var_dump kommt:

["_content:protected"]=> 
     string(37129) "%PDF-1.5 
     etc...