{"id":121,"date":"2015-08-01T21:13:53","date_gmt":"2015-08-01T19:13:53","guid":{"rendered":"http:\/\/giveback.danielmenzel.de\/?p=121"},"modified":"2015-08-01T21:27:42","modified_gmt":"2015-08-01T19:27:42","slug":"mit-php-eine-e-mail-mit-anhang-schreiben","status":"publish","type":"post","link":"http:\/\/giveback.danielmenzel.de\/?p=121","title":{"rendered":"Mit PHP eine E-Mail mit Anhang schreiben [UPDATE]"},"content":{"rendered":"<p>UPDATE: Siehe unten im Text<\/p>\n<p>Ich habe nun in den letzten Stunden viele Links und Code-Schnipsel gefunden mit denen man \u00fcber die normale &#8222;mail&#8220;-Funktion von php einen Anhang an eine E-Mail h\u00e4ngen kann.<\/p>\n<p>Leider f\u00fchrte kein Einziger davon zu Erfolg. <!--more-->Mein GMX-Webmailer hat nie den Anhang dargestellt sondern immer nur den MIME-Teil der E-Mail. Ich habe schon gedacht, dass irgendwas mit der PHP-Version oder dem nachgelagerten SSTMP nicht stimmt bis ich diesen Link gefunden habe:<\/p>\n<p><a href=\"http:\/\/www.immer-das-selbe.de\/webmail-ansicht-gmx-zerstort-e-mailansicht-e-mail-anhang\/\">http:\/\/www.immer-das-selbe.de\/webmail-ansicht-gmx-zerstort-e-mailansicht-e-mail-anhang\/<\/a><\/p>\n<p>Und genau das war\/ist die L\u00f6sung, Danke !<\/p>\n<p>Keine Ahnung warum in den ganzen Beispielen immer ein \\r\\n steht aber bei mir hat das definitiv nicht geklappt. Lediglich mit einem \\n versehen klappte es auf Anhieb!<\/p>\n<p>Der Linefeed-Unterschied-Bl\u00f6dsinn zwischen DOS\/Windows-Mac-Unix\/Linux war schon immer bl\u00f6d aber hier hatte ich nicht damit gerechnet. (Meiner unma\u00dfgeblichen Meinung ist allerdings &#8222;\\r\\n&#8220; das einzig grunds\u00e4tzlich Richtige da das Ganze von der Schreibmaschine abstammt und ein Carriage Return nicht zwangl\u00e4ufig eine Newline beinhaltet&#8230;)<\/p>\n<p>Was ich jetzt benutze kommt von\u00a0<a href=\"http:\/\/www.finalwebsites.com\/forums\/topic\/php-e-mail-attachment-script\u00a0\">http:\/\/www.finalwebsites.com\/forums\/topic\/php-e-mail-attachment-script<\/a><\/p>\n<p><strong>ohne die \\r<\/strong>\u00a0dann also so:<\/p>\n<pre>function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {\r\n $file = $path.$filename;\r\n $file_size = filesize($file);\r\n $handle = fopen($file, \"r\");\r\n $content = fread($handle, $file_size);\r\n fclose($handle);\r\n $content = chunk_split(base64_encode($content));\r\n $uid = md5(uniqid(time()));\r\n $name = basename($file);\r\n $header = \"From: \".$from_name.\" &lt;\".$from_mail.\"&gt;\\n\";\r\n $header .= \"Reply-To: \".$replyto.\"\\n\";\r\n $header .= \"MIME-Version: 1.0\\n\";\r\n $header .= \"Content-Type: multipart\/mixed; boundary=\\\"\".$uid.\"\\\"\\n\\n\";\r\n $header .= \"This is a multi-part message in MIME format.\\n\";\r\n $header .= \"--\".$uid.\"\\n\";\r\n $header .= \"Content-type:text\/plain; charset=iso-8859-1\\n\";\r\n $header .= \"Content-Transfer-Encoding: 7bit\\n\\n\";\r\n $header .= $message.\"\\n\\n\";\r\n $header .= \"--\".$uid.\"\\n\";\r\n $header .= \"Content-Type: application\/octet-stream; name=\\\"\".$filename.\"\\\"\\n\"; \/\/ use different content types here\r\n $header .= \"Content-Transfer-Encoding: base64\\n\";\r\n $header .= \"Content-Disposition: attachment; filename=\\\"\".$filename.\"\\\"\\n\\n\";\r\n $header .= $content.\"\\n\\n\";\r\n $header .= \"--\".$uid.\"--\";\r\n if (mail($mailto, $subject, \"\", $header)) {\r\n echo \"mail send ... OK\"; \/\/ or use booleans here\r\n } else {\r\n echo \"mail send ... ERROR!\";\r\n }\r\n }<\/pre>\n<p>[UPDATE]<\/p>\n<p>Pl\u00f6tzlich und unerwartet schl\u00e4gt das z.B. beim Provider 1&amp;1 fehl!<\/p>\n<p>Es kommt die Fehlermeldung &#8222;PHP Warning: \u00a0mail(): Multiple or malformed newlines found in additional_header in&#8220;<\/p>\n<p>Das liegt laut\u00a0<a href=\"http:\/\/stackoverflow.com\/questions\/30887610\/error-with-php-mail-multiple-or-malformed-newlines-found-in-additional-header\">http:\/\/stackoverflow.com\/questions\/30887610\/error-with-php-mail-multiple-or-malformed-newlines-found-in-additional-header<\/a><\/p>\n<p>daran, dass es wohl ein Update in PHP gab welches daf\u00fcr sorgt, dass das Ganze nun strikter gehandhabt wird. Die L\u00f6sung ist dort auch zu finden:<\/p>\n<pre>function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {\r\n $file = $path.$filename;\r\n $file_size = filesize($file);\r\n $handle = fopen($file, \"r\");\r\n $content = fread($handle, $file_size);\r\n fclose($handle);\r\n $content = chunk_split(base64_encode($content));\r\n $uid = md5(uniqid(time()));\r\n $name = basename($file);\r\n $header = \"From: \".$from_name.\" &lt;\".$from_mail.\"&gt;\\n\";\r\n $header .= \"Reply-To: \".$replyto.\"\\n\";\r\n $header .= \"MIME-Version: 1.0\\n\";\r\n $header .= \"Content-Type: multipart\/mixed; boundary=\\\"\".$uid.\"\\\"\\n\\n\";\r\n $emessage= \"--\".$uid.\"\\n\";\r\n $emessage.= \"Content-type:text\/plain; charset=iso-8859-1\\n\";\r\n $emessage.= \"Content-Transfer-Encoding: 7bit\\n\\n\";\r\n $emessage .= $message.\"\\n\\n\";\r\n $emessage.= \"--\".$uid.\"\\n\";\r\n $emessage .= \"Content-Type: application\/octet-stream; name=\\\"\".$filename.\"\\\"\\n\"; \/\/ use different content types here\r\n $emessage .= \"Content-Transfer-Encoding: base64\\n\";\r\n $emessage .= \"Content-Disposition: attachment; filename=\\\"\".$filename.\"\\\"\\n\\n\";\r\n $emessage .= $content.\"\\n\\n\";\r\n $emessage .= \"--\".$uid.\"--\";\r\n\r\n if (mail($mailto, $subject, $emessage, $header)) {\r\n echo \"mail send ... OK\"; \/\/ or use booleans here\r\n } else {\r\n echo \"mail send ... ERROR!\";\r\n $error = error_get_last();\r\n echo \"\\nERROR: \" . $error[\"message\"] .\"\\n\";\r\n }<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>UPDATE: Siehe unten im Text Ich habe nun in den letzten Stunden viele Links und Code-Schnipsel gefunden mit denen man \u00fcber die normale &#8222;mail&#8220;-Funktion von php einen Anhang an eine E-Mail h\u00e4ngen kann. Leider f\u00fchrte kein Einziger davon zu Erfolg.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,8],"tags":[],"class_list":["post-121","post","type-post","status-publish","format-standard","hentry","category-linux","category-php"],"_links":{"self":[{"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/posts\/121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=121"}],"version-history":[{"count":8,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/posts\/121\/revisions"}],"predecessor-version":[{"id":162,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=\/wp\/v2\/posts\/121\/revisions\/162"}],"wp:attachment":[{"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=121"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/giveback.danielmenzel.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}