2016-07-27 3 views
4

Ich versuche, HTML-E-Mails mit Anhängen von Opencart zu senden. Es gibt eine eingebaute Funktion $mail->addAttachment. Alles ist in Ordnung, außer dass an der Stelle des Anhangs eine weiße Box in Apple Mail steht. In der iOs Mail App wird der Anhang überhaupt nicht angezeigt. Auf GMail ist es ok:Apple Mail zeigt keine Anlagen korrekt aus PHP

enter image description here

Die Befestigung in Apple Mail zu Verfügung steht, denn wenn ich auf die weiße Fläche klicken verdoppeln, wird die Anlage geöffnet wird.

Hier ist die Quelle der Nachricht ist, geöffnet in GMail (I entfernt X Header):

X-Mailer: PHP/5.4.39-0+deb7u2 
Content-Type: multipart/related; boundary="----=_NextPart_fefb9509ef8523a96a17066ecf8472c8" 

------=_NextPart_fefb9509ef8523a96a17066ecf8472c8 
Content-Type: multipart/alternative; boundary="----=_NextPart_fefb9509ef8523a96a17066ecf8472c8_alt" 

------=_NextPart_fefb9509ef8523a96a17066ecf8472c8_alt 
Content-Type: text/plain; charset="utf-8" 
Content-Transfer-Encoding: 8bit 

Some text (text/plain) 


------=_NextPart_fefb9509ef8523a96a17066ecf8472c8_alt 
Content-Type: text/html; charset="utf-8" 
Content-Transfer-Encoding: 8bit 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd"> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
       <title>Test title</title> 
    </head> 
    <body> 
    <p>Some html text(text/html)</p> 
    </body> 
</html> 

------=_NextPart_fefb9509ef8523a96a17066ecf8472c8_alt-- 
------=_NextPart_fefb9509ef8523a96a17066ecf8472c8 
Content-Type: application/pdf; name="form.pdf" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="form.pdf" 
Content-ID <%2Fhome%2Fhtml%2Fdownload%2form.pdf> 
X-Attachment-Id: %2Fhome%2Fhtml%2Fdownload%2form.pdf 


JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G 
bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGdW0tzHLcRvs+vQGInGbqk0bwfuTl2qqKkbMkRk1Q58mFJ 
jkJylzvS7pIu8Q/o5oMuLlfpmB+Un5SvHwDmtdylSyXNAgM0uhuN7q8bo3fmO/POxPhTNIWp89Rs 
WvMvszbPvtom5nxrEv6zPccIenvjxq34V2xWPHsVXJo3TCtLoiYr49ykdZQVpsjqqKqqxlR1GWWW 
+jtQpUUTk5WmKjNzfmP+dGr+fAoStHKAlel9bLCyH1ympspqHRxHcRwn5vTcJDkP1cfpjXl2ekp8 
... 
------=_NextPart_fefb9509ef8523a96a17066ecf8472c8-- 

relevanten Teil von /system/library/mail.php:

foreach ($this->attachments as $attachment) { 
      if (file_exists($attachment)) { 
       $handle = fopen($attachment, 'r'); 

       $content = fread($handle, filesize($attachment)); 

       fclose($handle); 

       $message .= '--' . $boundary . $this->newline; 
       $message .= 'Content-Type: application/pdf; name="' . basename($attachment) . '"' . $this->newline; 
       $message .= 'Content-Transfer-Encoding: base64' . $this->newline; 
       $message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . $this->newline; 
       $message .= 'Content-ID: <' . basename(urlencode($attachment)) . '>' . $this->newline; 
       $message .= 'X-Attachment-Id: ' . basename(urlencode($attachment)) . $this->newline . $this->newline; 
       $message .= chunk_split(base64_encode($content)); 
      } 
     } 

EDIT :

ich habe erkannt, dass Content-ID und X-Geschiebe-Id das Problem war:

basename(urlencode($attachment) 

sollte sein:

urlencode(basename($attachment)) 

Es funktioniert jetzt in Apple Mail in Ordnung, aber die Bindung fehlt noch auf iOS (iPhone/iPad). Irgendeine Idee?

+0

wenn es etwas in Ihrem „Quelle“ Code, die relevant sein könnten, sollten Sie veröffentliche es. Sie haben als PHP, aber keinen "Code", um die Frage zu unterstützen. Wenn Sie HTML/JS usw. teilen möchten, dann veröffentlichen Sie es. Es könnte helfen, Dinge zu beschleunigen. –

+1

stellen Sie sicher, dass '$ message' tatsächlich definiert ist und wenn Sie keine öffnung' $ message = "Something" haben; 'dann müssen Sie vielleicht den ersten Punkt in' $ message. = '-' loswerden. $ Grenze. $ this-> newline; '. Über Fehlerberichte auf Fehler prüfen, kann es helfen. –

Antwort

4

Headers muss so sein:

MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 

In den meisten Fällen fehlende mime Versionstag gefunden. Sie haben Fehler in Grenzen lassen Sie mich zunächst Regeln body of a multipart entity geben hat die Syntax (nur die wichtigen Teile):

multipart-body := [preamble CRLF] 
        dash-boundary transport-padding CRLF 
        body-part *encapsulation 
        close-delimiter transport-padding 
        [CRLF epilogue] 
dash-boundary := "--" boundary 
encapsulation := delimiter transport-padding 
        CRLF body-part 
delimiter := CRLF dash-boundary 
close-delimiter := delimiter "--" 

Die vorhergehenden -- für jede Grenze in der Nachricht verwendet obligatorisch ist und die Hinter -- ist obligatorisch für die schließende Grenze (close-delimiter). So ein mehrteiliger Körper mit drei Körperteile mit boundary als Grenze kann wie folgt aussehen:

--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 

--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same message goes here... 

--boundary42-- 

Lesen Sie das Dokument RFC

Verwandte Themen