• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Newsletter

freakXHTML

Mitglied
Hallo zusammen,

auf meiner Webseite sind 174 Benutzer registriert. Jeder hat eine E - Mail Adresse in der Datenbank hinterlassen. Ob diese gültig sind, weiß ich nicht. Sie haben jedoch eine gültge E - Mail Adressen Syntax. Nun wollte ich einen Newsletter schreiben, doch das hat nicht geklappt und ich weiß nicht, wie viele Nutzer ihn überhaupt bekommen haben. Bei mindestens einem ist er aber angekommen.

Ich habe ihn geschrieben und auf "Senden" gedrückt. Dann hat sich die Webseite in einen Status verwandelt, als ob sie in einer Endlosschleife wäre - bis ich abgebrochen habe.

Das Problem ist, dass ich nicht viel Experementierfreiheit habe, da ich meine Nutzer ja nicht zuspammen kann. Ich zeig euch mal den Code:

PHP:
$sql = 'SELECT EMail FROM user'; //E - Mail Adressen werden aus der DB gelesen
   $result = $this->db->query($sql); 
   if(!$result) { 
    $this->db->error;
   }
 
   $table = array();
   while($table = $result->fetch_object())
   { 
    static $i = 0; 
    $recipient [$i] = $table->EMail; //Adressen werden in einem Array gespeichert
    $i++;
   }   
 
   foreach($recipient as $value) 
       mail($value, $subject, $content, UserAdmin::SENDER_NEWSLETTER); //Mails werden verschickt

Die Parameter in "mail" habe ich zuvor bestimmt.

Kann ich jemand vorstellen, wo der Fehler liegt? Wie kann ich auch an viele Nutzer Mails verschicken? Ich vermute mal, dass die Funktion "mail" irgendwie mit so vielen Adressen nicht klar kommt.

Vielen Dank
lg, freakXHTML
 
Was mir so auf die Schnelle auffällt, du setzt mit $i einen Array-Key. Den brauchst du nicht, weil der automatisch hochgezählt wird, und bei foreach wird das sowieso ignoriert, solange du keinen $key hast. d.h. $recipient[] = $table->EMail; reicht vollkommen aus.

Um zu prüfen, was hier los ist, würde ich den Senden-Befehl einer Variable zuweisen, z.B. $senden, und unten mit if($senden) prüfen, ob der Versand erfolgreich war. Wenn ja, würde ich 'EMail XY: Versand erfolgreich' ausgeben, ansonsten 'EMail XY: Versand fehlgeschlagen'.

Wenn er dann über die 174 Mails hinaus versendet, kannst du dann sehen...

Aber der Versandt von so vielen Mails dauert echt seine Zeit, kann sein, je nach Anbindung und verfügbaren Ressourcen, dass das einige Minuten dauern kann ^^
 
Das mit $i ist überflüssig. Das weiß ich. Aber das stellt meines Erachtens kein Hinderniss dar.

Mmmh....vielleicht hast Du recht und es dauert wirklich so lange. Dann frage ich mich aber, wie das große WEbseiten machen, wenn die Tausende E - Mail versenden. Eigentlich nutzen die ja dieselben Befehle. Oder haben die einfach bessere Rechner?

Vielen Dank
lg, freakXHTML
 
Man muss nicht zwingend ein PHP-Dokument zum Versenden verwenden, und man muss keine Datei verwenden, die von einem Client gestartet wird (d.h. im Browser geöffnet bleiben muss.). So viel ich weiß, machen viele 'großen' Websites das so, indem Sie per Cronjob eine Datei ausführen, welche beim Ausführen z.B. 50 E-Mails verschickt und in der Datenbank vermerkt, dass diese E-Mail Adressen eine E-Mail empfangen haben. Der Cronjob wird alle paar Minuten ausgeführt. Die haben natürlich auch bessere Server die für solche Anwendungen ausgelegt sind.
 
Ich habe jetzt noch mal einen Newsletter versendet und einfach mal abgewatet. Irgendwann hat die Webseite den scheinbaren "Endlosschleifen" Status tatsächlich verlassen und ich war eigentlich ganz froh.

Doch es hat sich heraus gestellt, dass nur die aller ersten in der Liste die Mail bekommen haben. Ich weiß aber nicht, wie viele in bekommen haben, nur dass es wenige sind.

Weiß jemand woran das liegt? Ich verstehe das einfach nicht und ich möchte es mit PHP machen.

Vielen Dank
lg, freakXHTML
 
Es gibt Neuigkeiten. Ich verschicke von keiner existierenden E - Mail Adresse. Mein Host bestimmt aber, dass maximal 20 Mails pro Stunde von einer nicht existierenden Mailadresse verschickt werden dürfen. Da liegt mein Problem. Ich muss also von einer echten Adresse, die zu meiner Domain gehört versenden. Bis jetzt sieht der Absender so aus:
PHP:
const SENDER_NEWSLETTER = 'From: Newsletter KFG Partys';
//...
foreach($recipient as $value) 
       mail($value, $subject, $content, UserAdmin::SENDER_NEWSLETTER);

Wie muss ich denn "SENDER_NEWSLETTER" abändern, damit ich von der Mailadresse info@kfg-partys verschicke?

Vielen Dank
lg, freakXHTML
</SPAN>
 
Ich habe die Lösung: Ich kann nur 20 Mails pro Stunde von einer nicht existierenden E - Mail Adresse schicken. Ich verschicke jetzt von einer existierenden Adresse und alles hat geklappt. Danke!!

Frohe Weihnachten!

lg, freakXHTML

PS.: Den Webspace habe ich gekauft!
 
Dann kannst du die Anzahl der Mails normalerweise auch ändern in deiner php.ini, wenn du zu dieser Zugang hast =)
 
Zurück
Oben