Der Martin: e-Mail mit Anhang (1blu)

Beitrag lesen

Moin,

Jetzt hab ich einen neuen Code gefunden, klappt leider immer noch nicht:

du wärst gut beraten, wenn du erst einmal versuchst, wesentliche Grundlagen der Programmierung zu verstehen, und dann vielleicht auch "Spezialitäten" von PHP, bevor du solche, für einen Anfänger recht anspruchsvollen, Aufgaben in Angriff nimmst.

Mit functions kenn ich mich nicht so aus.

Das solltest du ändern, denn das gehört zu den absoluten Grundlagen der meisten Programmiersprachen.

Wie muss ich die Datei angeben. Im Code steht ja "$files hash-array of files to attach"

Das sollte dir die Beschreibung dieses Codes vom Autor eigentlich sagen. Wenn es keine gibt, ist das ein schlechtes Zeugnis für den Autor. Wenn es eine gibt und du blickst nicht durch, können wir hier sicher was draus machen.

Was ist ein hash-array und wie erstell ich ihn wenn ich es mit dem form wie in meinen 1. Post mache?

Die Funktion, die du vorgestellt hast, ist offensichtlich dafür gedacht, auch *mehrere* Dateien als Anhang zu verschicken. Deswegen wird ein Array übergeben, das die Angaben über diese Dateien enthält. "hash array", oder im Deutschen "assoziatives Array" deshalb, weil die Einträge hier nicht über einen numerischen Index angesprochen werden, sondern über eine Art Schlüssel, ähnlich wie Datenbankeinträge anhand ihres Schlüssels adressiert werden können.
Aus dem zitierten Code kann man ablesen, was dieses Array enthalten muss:

if(is_array($files)) {

Hier wird erstmal überprüft, ob *überhaupt* ein Array übergeben wurde. Falls nicht, kann man sich ja das ganze Gedöns um die Attachments sparen.

foreach($files as $filename=>$filelocation) {

Da wird's interessant: Die foreach-Schleife geht nun der Reihe nach alle Arrayeinträge durch. Sie packt den Schlüssel jedes Eintrags (offensichtlich den Dateinamen) in $filename und den zugehörigen Wert (wohl den kompletten Pfad zur gewünschten Datei *auf dem Server*) in $filelocation.

if(is_readable($filelocation)) {

Mal sehen, ob die Datei überhaupt lesbar ist (existiert sie wirklich? Hat PHP die nötigen Zugriffsrechte?).

$data = chunk_split(base64_encode(implode("", file($filelocation))));

Ups, ein schöner verschachtelter Ausdruck. Also von innen nach außen aufdröseln. Erstmal den gesamten Dateiinhalt zeilenweise in ein Array holen [file()]. Dann die Zeilen zu *einem* String zusammenfassen [implode()], in base64 codieren und den langen codierten String wieder in ein Array aus einzelnen Zeilen aufteilen.

$content.= "Content-Disposition: attachment;".$lb;
$content.= "Content-Type: Application/Octet-Stream;";
$content.= " name="".$filename.""".$lb;
$content.= "Content-Transfer-Encoding: base64".$lb.$lb;
$content.= $data.$lb;
$content.= "--".$mime_boundary.$lb;
}

Und schließlich das ganze Geraffel mit den erforderlichen Rahmeninformationen in den Mail-Quelltext schreiben.

Muss ich die Variablen $to, $from, $subject .. schon in der Klammer nach dem functionsname bestimmen, oder erst später?

Wie ich schon sagte: Du solltest dich dringend mit den Grundlagen der Programmierung befassen, hier z.B. mit der Deklaration und dem Aufruf von Funktionen, und mit sogenannten formalen Parametern.

Viel Glück weiter,
 Martin

--
Der Gast geht solange zum Tresen, bis er bricht.