Hello,
Hallo,
ich befasse mich schon seit Tagen mit dem gleichen Problem und hab auch bei google.de etc. nichts passendes gefunden:
Aus Scripten heraus versenden wir Mails immer über eine Funktion, die direkt "sendmail" anspricht. Mit "text/plain"-Mails ist das auch kein Problem. Jetzt kommt allerdings hinzu, dass eine PDF-Datei als Anhang mit verschickt werden soll.
Folgende Funktion habe ich schon "zusammengeschustert":
function sendmail ($empfaenger, $subject, $str, $rechnr) {
$fp = popen('/usr/sbin/sendmail -f "xxx@xxx.de" "'.$empfaenger.'"',"w");
if(!$fp) {
return false;
}
else
{
$file = ("rechnungen/".$rechnr.".pdf");
$fo = fopen ($file, "rb");
$data = fread($fo,filesize($file));
fclose($fo);fputs ($fp, "From: xxx@xxx.de\n");
fputs ($fp, "To: ".$empfaenger."\n");
fputs ($fp, "Subject: Testmail\n");
fputs ($fp, "MIME-Version: 1.0\n");
fputs ($fp, "Content-Type: MULTIPART/MIXED; BOUNDARY=8323328-2120168431-824156555=:325\n");
fputs ($fp, "--8323328-2120168431-824156555=:325\n");
fputs ($fp, "Content-Type: application/octet-stream; name="".$rechnr.".pdf"\n");
fputs ($fp, "Content-Transfer-Encoding: BASE64");
fputs ($fp, "Content-Description:\n");
fputs ($fp, $data);
fputs ($fp, "--8323328-2120168431-824156555=:325--\n");
fputs ($fp, "Content-Type: text/plain; charset=US-ASCII\n\n");
hier fängt der Mailbody an
fputs ($fp, "der normale mailtext\n";
fputs ($fp, "--8323328-2120168431-824156555=:325\n");
pclose($fp);return true;
}
}
Da sehe ich einen wwesentlichen Fehler und vermute weitere:
1.
Du versuchst das Attachment im Mailheader zu versenden. Das wird Sendmail nicht gerne sehen und die eMail einfach verwerfen. Andere Systeme würden wahrscheinlich sogar abstürzen... (hab ich jedenfalls schon erlebt)
Das Attachment heisst "Anhang", weil es NACH der normalen email steht.
Bau Dir eine eMail mit Attachment mit einem Mailclient Deines Vertrauens und schau Dir an, wie der das macht.
2.
$data (base64-codiert) muss umgebrochen werden. Tut mir leid, wenn ich immer vergesse, nach wievielen Zeichen. Ich nehme immer 76 + \n. Das klappt immer. Dazu gibt es die Funktion chunk_split(), die aber per default das falsche Zeilenendezeichen (\r\n) benutzt. Du musst (\n) benutzten.
Der Standardtext (plain) muss auch umgebrochen werden. Zeilen dürfen 1000 Zeichen nicht überschreiten und es ist auch ein Gebot der Höflichkeit, nach ca 70-80 Zeichen mittels wordwrap() umzubrechen.
Probier das erstmal aus. Dann klappts auch mit sendmail...
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen