Serien-eMail-Script

Radhad

Erfahrenes Mitglied
Hallo Zusammen,

ich möchte ein Script erstellen, mit dem ich Serien-eMails verschicken kann. Der Aufbau soll so sein, dass man seinen Namen eintragen kann und den Text. Die Anrede sowie das MfG soll automatisch eingefügt werden. Das Problem dabei ist: es soll lokal eine csv Datei ausgewählt werden und die einzelnen Elemente in ein Array gespeichert werden. Außerdem sollen natürlich alle Zeilen automatisch abgearbeitet werden.

Wie erstelle ich den Button mit der Auswahl der csv-Datei und wie bekomme ich jeweils einen Datensatz in einen Array? Und wie sage ich dem Script, dass es alle Datensätze abarbeiten soll?


MfG Radhad
 
Serein-eMail = Serienbreif á la Word, nur gibt es z.b. bei Outlook so ne Funktion nicht. Der Button war ne blöde Frage, geb ich zu. Das Problem beim Array ist, dass die csv-Datei jede Spalte mit einem ";" trennt, undi ch nicht weiß wie man das splittet. Bei der Schleife ist die Frage, wie ich diese dynamisch aufbauen kann. Wäre es möglich zu überprüfen, ob der nächste Datensatz vorhanden ist und wenn nicht, setzte ich z.b. eine boolsche Variable auf False in einer do-while Schleife?


MfG Radhad
 
Das Problem beim Array ist, dass die csv-Datei jede Spalte mit einem ";" trennt, undi ch nicht weiß wie man das splittet.
PHP:
$foo = "Daten1;Daten2;Daten3";
$bar = explode(";", $foo);
print_r($bar); 
// muesste ausgeben:
// Array ( 0 => Daten1, 1 => Daten2, 2 => Daten3 );
 
PHP ist zum Glück schon von Haus aus recht gut bestückt. Die Funktion [phpf]fgetcsv[/phpf] gibt eine Zeile einer CSV-Datei als Array zurück.

Wo ist der Unterschied zu Explode fragt Ihr Euch? Die Funktion liest auch die Daten korrekt aus, die das Trennzeichen als Datenbestandteil beinhalten. Explode würde fälschlicherweise einen Datensatz in 2 aufteilen.

snuu
 
Zuletzt bearbeitet:
Ich habe das Script jetzt soweit fertig, allerdings läuft es eine ganze Zeit lang, ohne das etwas passiert. Folgend mein Quellcode:

PHP:
<html>
<head><title></title>
</head>

<body>
<?php
  if (empty($_POST["email"])) { ?>
    <form  method="post" action="serienemail.php">
    <table border="0" cellspacing="0" cellpadding="0" align="center">
      <tr>
        <td>
          Name:<td><input type="text" name="name"></td>
        </td>
      </tr>
      <tr>
        <td>
          Nachricht:<td><textarea name="nachricht" cols="40" rows="5"></textarea></td>
        </td>
      </tr>
      <tr>
        <td>
          eMail:<td><input type="text" name="email"></td>
        </td>
      </tr>
      <tr>
        <td>
          CSV-Datei:<td><input type="file" name="csvdatei"></td>
        </td
      </tr>
      <tr>
        <td colspan="2">
          <input type="submit" value="Absenden">
        </td>
      </tr>
    </table>
    </form>
<?}
else {
  $handle = fopen ($_POST["csvdatei"],"r");
  while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE ) {

    if($data[0] == "Frau") {
      $anrede='Sehr geehrte Frau';
    }
    else {
      $anrede='Sehr geehrter Herr';
    }

    mail($data[2],
    "".$_POST["betreff"]."",
    "$anrede $data[1],\n\n".$_POST["nachricht"]."\n\nMit freundlichen Grüßen\n".$_POST["name"]."",
    "".$_POST["email"]."");
  }
  fclose ($handle);
  echo "Vorgang erfolgreich abgeschlossen!";
}
?>

Vielleicht seht ihr einen logischen Fehler.


MfG Radhad
 
Zuletzt bearbeitet:
Die Datei wird gar nicht erst eingelesen. Verwende mal statt
PHP:
$handle = fopen ($_POST["csvdatei"],"r");
folgendes:
PHP:
$handle = fopen ($_FILES['csvdatei']['tmp_name'],"r");
Ausserdem fehlt dem Formular die Angabe des enctype-Parameters, welcher für Dateiuploads erforderlich ist:
PHP:
<form  method="post" action="serienemail.php" enctype="multipart/form-data">

Und eine Warung habe ich noch: Sichere Dein Script ab, so dass niemand ausser Dir es benutzen kann. Sonst ist es möglich Deinen Server zum Spammen zu benutzen. Stichwort: .htaccess

Um der Frage vorzubeugen, warum Dein Script nach 30 Sekunden abbricht:
PHP:
set_time_limit(0);

snuu
 
Es bricht ja nich ab und das Script taucht auch nirgends auf.
Wofür ist tmp_name?
Wo müsste ich denn set_time_limit(0) einfügen? Den Befehl kenne ich nicht.


MfG Radhad
 
Zuletzt bearbeitet:
Zurück