Formular Email attachment

Hallo,

Ich versuche jetzt schon seit 2 Tagen eine PHP Funktion zu schreiben die es ermöglich attachment mit der mail funktion zu verschicken, jedoch klappt dies nicht ;-(.
Hier ist mein Skript
// Bild einlesen
$fh = fopen($_FILES[‚file‘][‚tmp_name‘],„rb“);
$fichier = fread ($fh, $_FILES[‚file‘][‚size‘]);
fclose($fh);

// Bild Base64 codieren
$fichier = $_FILES[‚file‘][‚name‘];
$encoded = chunk_split(base64_encode($fichier));
$mail = „MIME-Version: 1.0\n“;
$mail .= „Content-type: multipart/mixed; „;
$mail .= „boundary=“----=_NextPart_001_0001“\n\n“;
$mail .= „------=_NextPart_001_0001\n“;
$mail .= „Content-type: text/plain; charset=US-ASCII\n“;
$mail .= „pweber\n“;
$mail .= „\n------=_NextPart_001_0001\n“;
$mail .= „Content-type: application/octet-stream;\n“;
$mail .= " name="".$_FILES[‚file‘][‚name‘].""\n";
$mail .= „Content-Disposition: attachment;\n“." filename="".$_FILES[‚file‘][‚name‘].""\n";
$mail .= „Content-Transfer-Encoding: base64\n\n“;
$mail .= $encoded;
$mail .= „\n------=_NextPart_001_0001\n“;
mail(„[email protected]“,„testing…“,$mail,„From:[email protected]\n“);

Vielen dank für ihre Hilfe

Hallo Pascal,
bei EMails mit Attachment müssen wir etwas gezielter vorgehen.
Hier ist ein Beispiel-Script mit 3 (!!!) Attachments:

$subject = „Daten-Versand $DATE_HEUTE_ANZEIGE“;
$from = „[email protected]“;
$to = „[email protected]“;
$message = „Hier steht die Nachricht.“;
$boundary = strtoupper(md5(uniqid(time())));
$mail_header = „From:blush:from\n“;
$mail_header .= „Cc:\n“;
$mail_header .= „Bcc:[email protected]\n“;
$mail_header .= „MIME-Version: 1.0“;
$mail_header .= „\nContent-Type: multipart/mixed; boundary=$boundary“;
$mail_header .= „\n\nThis is a multi-part message in MIME format – Dies ist eine mehrteilige Nachricht im MIME-Format“;
$mail_header .= „\n–$boundary“;
$mail_header .= „\nContent-Type: text/plain“;
$mail_header .= „\nContent-Transfer-Encoding: 8bit“;
$mail_header .= „\n\n$message“;
$lieferschein_content = fread(fopen($ATTACHEMENT01,„r“),filesize($ATTACHEMENT01));
$lieferschein_content = chunk_split(base64_encode($lieferschein_content));
$mail_header .= „\n–$boundary“;
$mail_header .= „\nContent-Type: application/pdf; name=“$LB_LIEFERSCHEINDATEI"";
$mail_header .= „\nContent-Transfer-Encoding: base64“;
$mail_header .= „\nContent-Disposition: attachment; filename=“$LB_LIEFERSCHEINDATEI"";
$mail_header .= „\n\n$lieferschein_content“;
$mail_header .= „\n–$boundary“;
/*
FALLS DU NUR 1 ATTACHMENT HABEN MÖCHTEST UND DEN UNTEREN QUELLTEXT WEGLÄSST,MUSST DU DAS $boundary HIER MIT \N–$boundary-- schließen,
die beiden – müssen beim letzten (und nur dort) $boudary dabei sein !
*/
$rechnung_content = fread(fopen($ATTACHEMENT02,„r“),filesize($ATTACHEMENT02));
$rechnung_content = chunk_split(base64_encode($rechnung_content));
$mail_header .= „\n–$boundary“;
$mail_header .= „\nContent-Type: application/pdf; name=“$LB_RECHNUNGSDATEI"";
$mail_header .= „\nContent-Transfer-Encoding: base64“;
$mail_header .= „\nContent-Disposition: attachment; filename=“$LB_RECHNUNGSDATEI"";
$mail_header .= „\n\n$rechnung_content“;
$mail_header .= „\n–$boundary“;
$daten_content = fread(fopen($ATTACHEMENT03,„r“),filesize($ATTACHEMENT03));
$daten_content = chunk_split(base64_encode($daten_content));
$mail_header .= „\n–$boundary“;
$mail_header .= „\nContent-Type: application/x-excel; name=“$LB_DATENSDATEI"";
$mail_header .= „\nContent-Transfer-Encoding: base64“;
$mail_header .= „\nContent-Disposition: attachment; filename=“$LB_DATENDATEI"";
$mail_header .= „\n\n$daten_content“;
$mail_header .= „\n–$boundary–“;
mail("$to",$subject,"",$mail_header);

Ich hoffe Dir ein wenig geholfen zu haben,
Steve

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ich versuche jetzt schon seit 2 Tagen eine PHP Funktion zu
schreiben die es ermöglich attachment mit der mail funktion zu
verschicken, jedoch klappt dies nicht ;-(.
Hier ist mein Skript
// Bild einlesen
$fh = fopen($_FILES[‚file‘][‚tmp_name‘],„rb“);
$fichier = fread ($fh, $_FILES[‚file‘][‚size‘]);
fclose($fh);

// Bild Base64 codieren
$fichier = $_FILES[‚file‘][‚name‘];

die Zeile lass weg, warum überschreibst du den Inhalt wieder mit dem Namen ?

$encoded = chunk_split(base64_encode($fichier));
$mail = „MIME-Version: 1.0\n“;
$mail .= „Content-type: multipart/mixed; „;
$mail .= „boundary=“----=_NextPart_001_0001“\n\n“;

Das gehört in den Header, aus \n mach \r\n
$header = „From:[email protected]\r\n“;
$header .= „MIME-Version: 1.0\r\n“;
$header .= "Content-type: multipart/mixed; „;
$header .= „boundary=“----=_NextPart_001_0001"“;

(in der letzten Zeile kein \r\n).

$mail .= „------=_NextPart_001_0001\n“;

Da dann ohne .

$mail .= „Content-type: text/plain; charset=US-ASCII\n“;
$mail .= „pweber\n“;
$mail .= „\n------=_NextPart_001_0001\n“;
$mail .= „Content-type: application/octet-stream;\n“;
$mail .= " name="".$_FILES[‚file‘][‚name‘].""\n";
$mail .= „Content-Disposition: attachment;\n“."
filename="".$_FILES[‚file‘][‚name‘].""\n";
$mail .= „Content-Transfer-Encoding: base64\n\n“;
$mail .= $encoded;
$mail .= „\n------=_NextPart_001_0001\n“;

Das ist der Body, allerdings fehlen in der letzten Zeile wohl 2 Minus ? am Ende. Schau noch mal im RFC nch, wie das sein muss, beim letzten Part wurde da an den boundary noch was geändert. Auch hier wieder \r\n…

mail(„[email protected]“,„testing…“,$mail,„From:[email protected]\n“);

Und damit steht der Ganze Kram im Body :frowning:

mail(„[email protected]“,„testing…“,$mail,$header);
sollte besser sein.

Vielen dank für ihre Hilfe

Alexander

P.S.: So etwas gibt es fertig, http://www.phpguru.org/mime.mail.html

Vielen Dank,

Jedoch verstehe ich nicht vor $LB_LIEFERSCHEINDATEI kommt kanns du mir helfen?

Vielen Dank.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Die Variablen $LB_LIEFERSCHEINDATEI $LB_RECHNUNGSDATEI und $LB_DATENDATEI wurden weiter oben im Script definiert, das sind die Pfade zu den Dateien, welche Du versenden möchtest von dem Script aus.

Zum Beispiel:
$LB_LIEFERSCHEINDATEI = „…/…/pfad/zu/der/lieferschein.pdf“;
$LB_RECHNUNGSDATEI = "pfad/zu/der/rechnungsdatei.pdf

Du kannst auf diese Art und Weise beliebig viele Attachments mit versenden, achte lediglich nur darauf, dass immer nur das letzte $boudary zwei Striche davor und auch zwei danach hat, die anderen alle nur zwei davor.

Schöne Grüße,
Steve

Vielen Dank,

Jedoch verstehe ich nicht vor $LB_LIEFERSCHEINDATEI kommt
kanns du mir helfen?

Vielen Dank.

Vielen vielen Dank,

Alles klappt jedoch klappt es nicht mit application/msword ist dies normal?

Pascal.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Kein Problem.

Das klappt auch mit allen Anwendungen, die Datei musst Du dann natürlich dementsprechend von einem anderen Pfad auslesen (*.doc statt *.pdf), die Datei muss dann anders benannt werden in dem Moment in dem sie an die Mail angehängt wird (*.doc statt *.pdf) und -
achte bei der Dokumenten-Typ-Angabe auf das richtige Format,
für Word z.B.
$mail_header .= „\nContent-Type: application/x-word; name=“$LB_LIEFERSCHEINDATEI"";
für Excel:
$mail_header .= „\nContent-Type: application/x-excel; name=“$LB_LIEFERSCHEINDATEI"";

oder ähnliches, weißt Du die Formatvorgabe nicht, gib dort die Endung der Datei an doc oder xls oder ähnlich.

Du kannst damit alle Dateien Deiner Wahl verschicken.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]