 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
02.07.2008, 12:58
|
#1
|
|
TP-Member
Registriert seit: Sep 2005
Ort: Altenbeken
|
Fragen zur Funktion mail()
Hallo Freunde der Nacht,
in meinem Skript namens GigKalender kann man mehrere Benutzer anlegen und ihnen über ein Formular mit der php-Funktion mail() eine eMail zukommen lassen. Bei den Kunden, bei denen ich dieses Skript eingerichtet habe, funktioniert dies auch problemlos. Heute bekam ich von extern eine Anfrage, warum es nun doch mal nicht klappt.
In diesem Zusammenhang habe ich zu dem ganzen folgende Fragen:
a) Kann ich anhand von phpinfo() erkennen, ob auf dem Server die Funktion mail() aktiviert bzw. deaktiviert ist?
b) Was hat es in diesem Zusammenhang mit dem 'safemode' auf sich?
c) Die Funktion mail() liefert als Ergebnis (true|false) zurück. Worauf bezieht sich das Ergebnis und inwieweit ist es zuverlässig?
d) Warum könnte mein Skript (s.u.) trotz der Bestätigung, dass die Funktion mail() korrekt ausgeführt wurde, dennoch keine Mails verschicken?
Wäre prima, wenn ihr mir hierzu Antworten geben könntet.
Als Ergänzung hier noch der entsprechende Code:
PHP-Code:
$MailSubject = $_POST['MailSubject'];
$MailMessage = $_POST['MailMessage'];
$MailSubject = strip_tags($MailSubject);
$MailMessage = strip_tags($MailMessage);
$SQL_Befehl = "SELECT * FROM ".$prefix."user";
$resultat = mysql_db_query($db_name, $SQL_Befehl);
// Mailadressen im Array speichern
while ($row = mysql_fetch_array($resultat))
{
extract($row);
$bccarray[] = $UserEmailadress;
}
// BCC-Erzeugen
foreach ($bccarray as $key => $email)
{
$bcc .= "Bcc: $email\r\n";
}
// Mail mit Header definieren
$bccempfaenger = implode(",", $bccarray);
$optheader[] = "From: ".getSetup(SetupSender)."< ".getSetup(SetupMailFrom)." >";
$optheader[] = "Reply-To: ".getSetup(SetupSender)."< ".getSetup(SetupMailReply)." >";
$optheader[] = "BCC: ".$bccempfaenger;
$header = implode("\n", $optheader);
// Mail versenden
if ( mail("", $MailSubject, $MailMessage, $header) ) { echo '<p>'.$L_055.'</p>'; }
else { echo '<span class="Fehlermeldung">ERROR: eMail could not be sent!</span><br /><br />'; }
Die aufrufende index.php erzeugt XHTML-Code, welches in den Metatags wie folgt definiert ist:
HTML-Code:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Vielen Dank im Voraus und einen schönen Gruß aus dem Eggegebirge,
Ravelli
|
|
|
02.07.2008, 15:13
|
#2
|
|
TP-Moderator
Registriert seit: Nov 2004
Ort: Wuppertal
|
Es könnte sein, dass der Kunde auf dem Webspace nur - sagen wir mal - 100 E-Mails am Tag verschicken kann. Wenn das Kontingent verbraucht ist, gehts nimmer.
Davon ganz abgesehen, aus dieser Zeile werde ich nicht schlau:
PHP-Code:
if ( mail("", $MailSubject, $MailMessage, $header) ) ......
Da ist irgendwie kein Empfänger angegeben? Oder ist das jetzt nur, damit die richtige Adresse hier nicht steht, dann will ich nichts gesagt haben.
__________________
Chuck Norris darf während der Fahrt mit dem Busfahrer sprechen!
|
|
|
02.07.2008, 15:39
|
#3
|
|
TP-Member
Registriert seit: Sep 2005
Ort: Altenbeken
|
Hallo maxi89,
vielen Dank für Deine Antwort!
Ich habe vorhin den Provider angeschrieben - in diesem Fall ist es Evanzo. Sie schrieben mir nach ein paar Minuten schon zurück, dass die Funktion mail() bei Ihnen aktiv sei, es aber eine Begrenzung der Mails pro Stunde gibt. Mit meinem Skript werden in der Regel vllt. so 6 verschickt, halt für jedes Bandmitglied eine. Möglich ist natürlich, dass andere Skripte schon das Kontingent aufgebraucht haben.
Bei der Zeile mit der Mail-Funktion übergebe ich alle Empfänger in der Variable $header definiert als BCC. Ich habe leider bisher nicht herausfinden können, ob als Empfänger mindestens eine Adresse angegeben sein soll. Der PHP-Parser gibt mir dazu keine Fehlermeldung aus, auch keine Warnung oder Notice-Meldung.
Ich habe allerdings ein paar Tippfehler entdeckt: Z.B. ist die foreach-Schleife überflüssig und bei den Aufrufen der Funktion getSetup() fehlen mehrere Hochkomma
Korrigiert sieht das ganze nun wie folgt aus:
PHP-Code:
$MailSubject = $_POST['MailSubject'];
$MailMessage = $_POST['MailMessage'];
$MailSubject = strip_tags($MailSubject);
$MailMessage = strip_tags($MailMessage);
$SQL_Befehl = "SELECT * FROM ".$prefix."user";
$resultat = mysql_db_query($db_name, $SQL_Befehl);
// Mailadressen im Array speichern
while ($row = mysql_fetch_array($resultat))
{
extract($row);
$bccarray[] = $UserEmailadress;
}
$bccempfaenger = implode(",", $bccarray);
// Mail mit Header definieren
$optheader[] = "From: ".getSetup('SetupSender')."< ".getSetup('SetupMailFrom')." >";
$optheader[] = "Reply-To: ".getSetup('SetupSender')."< ".getSetup('SetupMailReply')." >";
$optheader[] = "BCC: ".$bccempfaenger;
$header = implode("\n", $optheader);
// Mail versenden
if ( mail("", $MailSubject, $MailMessage, $header) ) { echo '<p>'.$L_055.'</p>'; }
else { echo '<span class="Fehlermeldung">ERROR: eMail could not be sent!</span><br /><br />'; }
Wer Anworten auf meine obigen Fragen hat... immer her damit! :-)
Schönen Gruß,
Ravelli
|
|
|
02.07.2008, 16:31
|
#4
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Zitat:
Zitat von Ravelli
Bei der Zeile mit der Mail-Funktion übergebe ich alle Empfänger in der Variable $header definiert als BCC.
|
Hier dürfte dann auch Dein Problem liegen.
Das true als Rückgabe der function erfolgt dann, wenn der SMTP Server ein OK meldet, dass die Mail auf Reise ging. Diese Meldung ist idr. recht zulässig.
Problematischer wird es dann schon auf dem Mailserver, der die Mail annimmt.
Ein Mail-Header ohne To wird oft als Spam anerkannt und somit nicht zugestellt.
Anstatt nun BCC zu nutzen, rufe mail() besser in einer Schleife auf, wo dann jeder Empfänger sep. im To steht.
|
|
|
02.07.2008, 22:19
|
#5
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
die Mail kann nur im Mülleimer des Servers landen, eine Fehlermeldung bekommst Du nicht, aber wenn das Mailformat falsch ist, hat der Server (zu Recht) was gegen die Versendung!
mail("", ... ist illegal!
|
|
|
02.07.2008, 23:19
|
#6
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Ausserdem sollte man einen vollständigen Header benutzen, der u.a. auch beinhaltet durch was die Mail verschickt wurde, sonst landet die auch oft in irgend einem Spamfilter. Benutze mal die Forumsuche, dann findest Du diverse Beispiele für ordentliche Mail-Header.
EDIT
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
|
|
05.07.2008, 17:07
|
#7
|
|
TP-Member
Registriert seit: Sep 2005
Ort: Altenbeken
|
Hallo zusammen,
nun habe ich das Skript wie von euch vorgeschlagen so abgeändert, dass die eMails mittels einer for-Schleife abgeschickt werden. Eine Besserung hat das nicht gebracht.
Nun habe ich festgestellt, dass ein anderes Skript - um genauer zu sein, das Gästebuch-Skript des GigKalenders - die eMails fehlerlos verschickt und diese auch beim Empfänger ankommen... und dies ohne erweiterten Header.
Daher vermute ich mal, dass der Nutzer vielleicht krumme Daten eingegeben hat, die der Mailserver nicht verträgt (Er hat übrigens seinen Webspace bei Evanzo). Dies werde ich daher erstmal überprüfen.
Der Vollständigkeit halber hier nun das derzeitige Skript:
PHP-Code:
$MailSubject = $_POST['MailSubject'];
$MailMessage = $_POST['MailMessage'];
$MailSubject = strip_tags($MailSubject);
$MailMessage = strip_tags($MailMessage);
$SQL_Befehl = "SELECT * FROM ".$prefix."user";
$resultat = mysql_db_query($db_name, $SQL_Befehl);
// Mailadressen im Array speichern
while ($row = mysql_fetch_array($resultat))
{
extract($row);
$Empfaenger[] = $UserEmailadress;
}
// Mail mit Header definieren
$optheader[] = "From: ".getSetup('SetupSender')."< ".getSetup('SetupMailFrom')." >";
$optheader[] = "Reply-To: ".getSetup('SetupSender')."< ".getSetup('SetupMailReply')." >";
$header = implode("\n", $optheader);
// Mail versenden
$Fehler = 0;
for ($i=0; $i<count($Empfaenger); $i++)
{
if ( !mail($Empfaenger[$i], $MailSubject, $MailMessage, $header) )
{
$Fehler++;
echo '<span class="Fehlermeldung">ERROR: eMail could not be sent! ('.$Empfaenger[$i].')</span><br />';
}
}
if ( !$Fehler ) { echo '<p>'.$L_055.'</p>'; }
}
echo '<br />';
if ($_POST['mail']==$L_Button24) { echo '<p>'.$L_056.'</p>'; }
Ein tolles Wochenende wünscht Euch Ravelli ;-)
|
|
|
09.07.2008, 14:55
|
#8
|
|
TP-Member
Registriert seit: Sep 2005
Ort: Altenbeken
|
Hallo zusammen,
nun habe ich mir mal die Daten angeschaut, die der Nutzer meines Skriptes verschicken möchte:
Empfaenger: mail@meinedomain.xyz
Subject: Testmail
Message: Testmail
Header: From: Bandname (Vorname)< mail@meinedomain.xyz > Reply-To: Bandname (Vorname)< mail@meinedomain.xyz >
Verdächtig sehen hier für mich die runden Klammern in der Absende- und Antwort-Adresse der Namenszusätze aus:
Bandname (Vorname)< mail@meinedomain.xyz >
Gibt es eine Definition, welche Zeichen der Namenszusatz einer eMail-Adresse enthalten darf? In der Spezifikation für eMail-Adressen ' RFC 2822' steht leider nichts darüber.
Zudem habe ich festgestellt, dass z.B. beim Webhoster Tripod der Namenszusatz komplett entfernt wird.
Für Eure bisherigen und hoffentlich zukünftigen Antworten einen herzlichen Dank!
Schönen Gruß aus dem Regenloch,
Ravelli
|
|
|
09.07.2008, 15:15
|
#9
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
Das einzige, was falsch aussieht, sind die Zwischenräume in der Email-Adresse und den spitzen Klammern - die sollten weg.
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:49 Uhr.
|
 |