PHP: Erweiterte mail()-Funktion [xmail()]
-
Hallo! Ich habe aus dem Internet folgende Funktion kopiert:
/* $email_address = "Recievers email"; $email_from = "Senders email"; $subject = "Any subject you like!"; $msg = "Text message shown in email"; $attach_filepath = "path to existing picture files. Should be an array!"; */ function xmail($email_address,$email_from,$subject,$msg,$attach_filepath) { $b = 0; $mail_attached = ""; $boundary = md5(uniqid(time(),1))."_xmail"; if (count($attach_filepath)>0) { for ($a=0;$a<count($attach_filepath);$a++) { if ($fp = fopen($attach_filepath[$a],"rb")) { $file_name = basename($attach_filepath[$a]); $content[$b] = fread($fp,filesize($attach_filepath[$a])); $mail_attached .= "--".$boundary."\r\n" ."Content-Type: image/jpeg; name=\"$file_name\"\r\n" . "Content-Transfer-Encoding: base64\r\n" . "Content-Disposition: inline; filename=\"$file_name\"\r\n\r\n" .chunk_split(base64_encode($content[$b]))."\r\n"; $b++; fclose($fp); } else { echo "Anhang konnte nicht gesendet werden."; } } $mail_attached .= "--".$boundary." \r\n"; $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\" Message-ID: ".date(dmYHis)."@domain.net"; $mail_content = "--".$boundary."\r\n" . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n" . "Content-Transfer-Encoding: 8bit\r\n\r\n" . $msg."\r\n\r\n".$mail_attached; return mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header); } else { return mail($email_address,$subject,$msg,"From: ".$email_from); } }
Problem: Dateianhänge erscheinen als "Text" in der EMail. Kann mir jemand sagen, was ich ändern muss, damit Dateianhänge auch wirklich als Datei ankommtn? Ich vermute, dass der Author einen Parameter falsch gesetzt hat, aber ich weiß nicht, welchen und ich hab auch schon probiert es zu verbessern, aber es hat nicht geklappt.
MfG Windoof
-
Versuch es mal mit
Content-Disposition: attachment
anstelle von
Content-Disposition: inline; filename=\"$file_name\"
-
Das hilft leider auch nichts... Aber vielleicht hilf ja die Info, wie die EMail aussieht, wenn ich sie erhalte:
Content-Type: multipart/mixed; boundary="991f4a4e8a908681b856c846ff990d5d_xmail" Message-ID: 29012004230125@domain.net Date: Thu, 29 Jan 2004 23:01:25 +0100 (CET) --991f4a4e8a908681b856c846ff990d5d_xmail Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8bit Testdatei --991f4a4e8a908681b856c846ff990d5d_xmail Content-Type: image/jpeg; name="test.php" Content-Transfer-Encoding: base64 Content-Disposition: attachment PGh0bWw+PGhlYWQ+PHRpdGxlPk5ld3MvUHJlc3NlPC90aXRsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9 ImphdmFzY3JpcHQiPg0KPCEtLQ0KZnVuY3Rpb24gc2hvd2luZm8oaW5mbykNCnsNCiBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZChpbmZvKS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIjsNCn0NCmZ1 bmN0aW9uIG5vaW5mbyhpbmZvKQ0Kew0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZm8pLnN0 eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7DQp9DQovLy0tPjwvc2NyaXB0Pg0KPGxpbmsgcmVsPSJz dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibWFpbi5jc3MiPg0KPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4NCjwhLS0NCmRpdiB7IGJvcmRlci1zdHlsZTogb3V0c2V0OyBib3JkZXItd2lk dGg6IDVweDsgYm9yZGVyLWNvbG9yOiAjMDAwMEQwOyBwb3NpdGlvbjogYWJzb2x1dGU7IHZpc2li aWxpdHk6IGhpZGRlbjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA5OTsgY29sb3I6ICNmZmZmZmY7 IGZvbnQtZmFtaWx5OiBhcmlhbCwgaGVsdmV0aWNhLCB0YWhvbWEsIHZlcmRhbmE7IGZvbnQtc2l6 ZTogMTBwdDsgd2lkdGg6IDQwMHB4OyB9DQovLy0tPjwvc3R5bGU+DQo8L2hlYWQ+PGJvZHk+DQo8 P3BocA0KJGhhbmRsZT1mb3BlbigkeWVhci4iXyIuJGxhbmcuIi50eHQiLCJyIik7DQokc291cmNl PWZyZWFkKCRoYW5kbGUsZmlsZXNpemUoJHllYXIuIl8iLiRsYW5nLiIudHh0IikpOw0KZmNsb3Nl KCRoYW5kbGUpOw0KJGNvdW50PTA7DQokbnI9MDsNCnByaW50ICI8aDE+TmV3cy9QcmVzcyI7IGlm ICgkbGFuZz09ImQiKSB7IGVjaG8gImUiOyB9IHByaW50ICIgJHllYXI8L2gxPlxuIjsNCiRzb3Vy Y2U9ZXJlZ19yZXBsYWNlKCI6MToiLCI8YSBocmVmPVwiamF2YXNjcmlwdDpzY2hvd2luZm8oJyIs JHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjI6IiwiJylcIiBvbk1vdXNlT3Zlcj1c InNob3dpbmZvKCciLCRzb3VyY2UpOw0KJHNvdXJjZT1lcmVnX3JlcGxhY2UoIjozOiIsIicpXCIg b25Nb3VzZU91dD1cIm5vaW5mbygnIiwkc291cmNlKTsNCiRzb3VyY2U9ZXJlZ19yZXBsYWNlKCI6 NDoiLCInKVwiPiIsJHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjU6IiwiPC9hPlxu PGJyPjxkaXYgbmFtZT1cIiIsJHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjY6Iiwi XCIgaWQ9XCIiLCRzb3VyY2UpOw0KJHNvdXJjZT1lcmVnX3JlcGxhY2UoIjo3OiIsIlwiPiIsJHNv dXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjg6IiwiPC9kaXY+Iiwkc291cmNlKTsNCnBy aW50ICIkc291cmNlIjsNCj8+DQo8L2JvZHk+PC9odG1sPg== --991f4a4e8a908681b856c846ff990d5d_xmail
Also: Er sendet alles als reinen Text.
-
Zuviele Linebreaks
ersetze \r\n mal durch \n
-
Schau dir mal das hier an. Ich habe festgestellt, dass der Aufbau der Mail davon etwas abweicht - evtl. liegt es daran
-
Shade Of Mine schrieb:
ersetze \r\n mal durch \n
Hab ich auch probiert, dann kommt die EMail garnicht erst an. Aber trotzdem danke. Ich werd jetzt mal flenders Vorschlag probieren...
...Please wait ...
-
Cool, danke ihr beiden! Ihr hattet beide recht, ich muss \r\n durch \n ersetzen und im Header, wo boundary definiert wird, muss dahinter noch ein Semikolon. Danke ihr beiden! Zur Komplettlösung gebe ich nochmal die xmail()-Funktion durch:
function xmail($email_address,$email_cc,$email_bcc,$email_from,$subject,$msg,$attach_filepath,$want_attach) { $b = 0; $mail_attached = ""; $boundary = "000XMAIL000"; if (count($attach_filepath)>0 && $want_attach) { for ($a=0;$a<count($attach_filepath);$a++) { if ($fp=fopen($attach_filepath[$a],"rb")) { $file_name=basename($attach_filepath[$a]); $content[$b]=fread($fp,filesize($attach_filepath[$a])); $mail_attached.="--".$boundary."\n" ."Content-Type: image/jpeg; name=\"$file_name\"\n" ."Content-Transfer-Encoding: base64\n" ."Content-Disposition: inline; filename=\"$file_name\"\n\n" .chunk_split(base64_encode($content[$b]))."\n"; $b++; fclose($fp); } else { echo "Anhang konnte nicht gesendet werden."; } } $mail_attached .= "--".$boundary."\n"; $add_header ="MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"; Message-ID: <".md5($email_from)."@domain.net>"; $mail_content="--".$boundary."\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 8bit\n\n" .$msg."\n\n".$mail_attached; return mail($email_address,$subject,$mail_content,"From: ".$email_from."\nCC: ".$email_cc."\nBCC: ".$email_bcc."\nErrors-To: ".$email_from."\n".$add_header); } else { return mail($email_address,$subject,$msg,"From: ".$email_from."\nCC: ".$email_cc."\nBCC: ".$email_bcc."\nErrors-To: ".$email_from); } }