php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit E-Mail-Versand via mail()


 
hasel
21-11-2005, 17:25 
 
Guten Tag zusammen,

ich habe ein Problem hinter das ich nicht so wirklich dahinterkomme.
Ich habe mir ein Skript geschrieben, was aus einer Datenbank E-Mails ausliest. Während diese while-Schleife läuft soll er jedes mal an eine E-Mail Adresse (die der gerade ausgelesenen Position) eine E-Mail versenden.

Habe dies bisher mit 1 und mit 2 Empfängern probiert.

alle Inhalte in der mail() Funktion sind Inhalte einer HTML-E-Mail.
In der E-Mail ist auch ein Stylesheet integriert.

$result = mysql_query("SELECT mail FROM adressen");
while ($maildetails = mysql_fetch_array($result)) {
$to = $maildetails[mail];
/* Verschicken der Mail */
mail($to, $subject, $message, $headers);
echo "E-Mail an $maildetails[mail] erfolgreich versandt<br />";
}

die echo-Ausgabe ist auch korrekt, er gibt jede E-Mail nur 1 mal aus mit nem simplen break dahinter.

Nun das Problem:
Das Skript versendet die E-Mail nicht 1 mal an dem jeweiligen Empfänger, sondern ~100 mal. Das witzige bzw. komische daran ist, das dies nicht immer geschieht, sondern wohl so wie ich das feststellen konnte bisher, nach Lust und Laune.
Habe auch schon freemail Anbieter ausprobiert die erhalten auch die selbe Anzahl an Mails

Wo könnte das Problem noch liegen? Hat da eventuell jemand schon die selbe Erfahrung gemacht? Freue mich auf jede Idee oder Anregung wo man noch suchen könnte.

Greetz
hasel

 
bitesser
21-11-2005, 18:45 
 
Hm, also soweit ich das überblicke müsste das so gehen. Aber was steht denn in Deinen headers drin für die Email? Vielleicht gibt es da ein Problem.

 
TobiaZ
22-11-2005, 10:49 
 
kannst du mit 100%iger sicherheit sagen, dass das script nur einmal ausgeführt wird?

 
hasel
22-11-2005, 11:29 
 
@bitesser
also im header steht folgendes:

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* zusätzliche Header */
$headers .= "From: xxx@gmx.org\r\n";

als Betreff ist Folgendes drinne

$subject = "Irgendein Betreff halt";

und als Inhalt ist halt eine aufgebaute Seite in html die Inhalte aus einer Datenbank dort reinpostet


@TobiaZ

echo "E-Mail an $maildetails[mail] erfolgreich versandt<br />";
nach diesem Befehl schreibt er mit die E-Mail-Adressen (die 2 die ich drin habe im Moment) untereinander hin

sprich

E-Mail1
E-Mail2

Würde das Skript mehrfach ausgeführt werden, müssten ja auch mehrfach die E-Mail-Adressen dort stehen oder?
sprich eigentlich kann er dann, da das in einer while Schleife läuft die mail() Funktion auch nur 1 mal aufrufen.

:dontknow:

greetz

 
TobiaZ
22-11-2005, 11:44 
 
Würde das Skript mehrfach ausgeführt werden, müssten ja auch mehrfach die E-Mail-Adressen dort stehen oder? Falsch! Würde das scipt mehrfach ausgeführt werden, würdest du von den ersten 99 mal nichts mitbekommen und nur das 100. mal sehen. oder nur das erste sehen und die restlichen 99 mal gar nicht mitbekommen.

 
hasel
22-11-2005, 11:55 
 
hmm .. stimmt, weil das Skript bzw. die datei in dem es liegt ja immer wieder neu laufen würde und ich ja nur die letzte Ausführung angezeigt bekomme :rolleyes:

Dann kann ich das nicht 100%ig sagen.
Gibt es da ne Möglichkeit zu überprüfen wie oft das ausgeführt wird ?
Oder eine Möglichkeit das ich das 100%ig erkennen kann...

also bisher rufe ich das skript einfach im Webbrowser auf. Sprich ich geb einfach www.domain.de/skript.php ein und bekomme das dann dementsprechend angezeigt, bzw. die letzte Ausführung.

schlimm das solche eigentlich einfachen Dinge immer so komplizierte Ausmaße annehmen :eek: :D

 
TobiaZ
22-11-2005, 11:58 
 
das einfachste wäre, wenn du in die logdatei deines servers gucken würdest.

ansonsten kannst du auch nen einfachen counter in das script einbauen.

 
hasel
22-11-2005, 12:05 
 
ach da fällt mir auch noch was ein
also die 100 Mails kommen nicht direkt an
sondern immer später, könnt da vllt die Lösung drin liegen ?

ok ich werd mal die Logfiles durchstöbern, vllt finde ich da ja was dann ;)

inwiefern meinste das mit dem Counter ?

 
TobiaZ
22-11-2005, 12:11 
 
das ist das beste anzeichen dafür, dass da irgendwann noch ne ausführung stattfindet, von der du nichts weißt.

Counte = ganz normaler counter, der dir anzeigt, wie oft das script ausgeführt wurde. Wenn er das erste mal 123 anzeigt, beim nächsten mal aber mehr als 124 anzeigt, dann weißt du, dass da was nicht stimmt.

 
hasel
22-11-2005, 14:13 
 
hmm ... irgendwie habe ich gerade mit dem Counter ein Problem :confused:
muss ich die Werte da nicht in der Datenbank einfach ablegen oder einfach die variable ? aber die ginge doch verloren wenn ich das skript nochmal aufrude ?

Sry, bin ein wenig durcheinander ^^
Vielleicht denke ich gerade ein wenig ZU kompliziert :rolleyes:

 
TobiaZ
22-11-2005, 14:35 
 
Wenn du mit nem Counter überfordert bist, wäre ein fertiges script an dieser Stelle sicher das bessere ;)

leg den wert ab, wo du willst. Mysql, Flatfile, ... Nur nicht als Var in dem Script selber. Das thema hatten wir ja bereits...

 
hasel
22-11-2005, 14:48 
 
dann guck ich da mal, wo ich was finde ohne da noch nen fehler reinzuhauen, das wär mir dann doch was peinlich :D

habe jetzt das Skript ein wenig umgeschrieben


$result = mysql_query("SELECT mail FROM adressen");
$maildetails = array();
while ($row = mysql_fetch_array($result)) {
$maildetails[] = $row; //Schreiben wir die Adressen in nen Extraarray. Eigentlich nicht nötig, aber es macht Spaß!
}

$maildetails_count = count($maildetails); // Zählen wir mal die Einträge
if($maildetails_count){ // Ist was drin, machen wir uns an den Mailversand
for($i=0; $i<$maildetails_count;$i++){
if(!empty($maildetails[$i]['mail'])){ // Schauen wir mal, ob ne Mailadresse vorhanden ist
$to = $maildetails[$i]['mail']; // Übertragen sie in die Variable
if(mail($to, $subject, $message, $headers)){ // Verschicken wir die Mail und überprüfen dabei, ob der Versand erfolgreich war
echo 'E-Mail an '.$to.' erfolgreich versandt<br />'; // Japp
} else {
echo 'E-Mailversand an '.$to.' fehlgeschlagen<br />'; // Nope
}
} else {
echo "E-Mail nicht vorhanden!<br />";
}
}
}

Habe auch noch den Namen der Datei umbenannt, um der Möglichkeit vorzubeugen das irgendwo nen Cronjob oder sowas läuft wovon ich nix weiß bzw. den ich ned finde :rolleyes:

Und nu hoffe ich einfach mal :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:32 Uhr.