mail()

pc-freak

Mitglied
Ich wollte gerade ein Skript für meine Website programmieren. Mit diesem Skript sollte man emails verschicken können.

CODE <?php


if(!isset($action)){

?>


</p>


<form name="form1" method="post" action="<?php echo $PHP_SELF;?>">
<input name="action" type="hidden" value="send">
<table width="394" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="86" ><b>Von:</b></td>
<td width="300" ><input name="fname" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>Absender E-Mail:</b></td>
<td width="300" ><input name="femail" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>An E-Mail:</b></td>
<td width="300" ><b><?php echo $toemail; ?></b></td>
</tr>
<tr>
<td valign="top" width="86"><b>Nachricht:</b></td>
<td width="300">
<textarea name="message" rows="5" cols="35"></textarea>
</td>
</tr>

<tr>
<td width="86"><b>Typ:</b></td>
<td width="300">
text <input name="rdType" type="radio" value="0" checked>
  
html <input name="rdType" type="radio" value="1">
</td>
</tr>

<tr>
<td width="86"> </td>
<td width="300">
<input name="cmdSend" type="submit" value="senden"> 
<input name="cmdReset" type="reset" value="reset">
</td>
</tr>
</table>
</form>


<?php
}else{
$toemail = $_GET['toemail'];
$subject = "Mail vom Web-Formular";
$from = $fname . "<$femail>";
$headers = "From: $from \r\n";
$message = $message."";
if($rdType == 1){
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/html";
$message = stripslashes($message);
}else{
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/plain; charset=iso-8859-1";
}
$ok = @mail($toemail, $subject, $message, $headers);
if ($ok) {
echo "<center><font class='general'>Die E-Mail wurde erfolgreich gesendet. Vielen Dank.</font></center>";
} else {
echo "<center><font class='general'>Die E-Mail konnte nicht gesendet werden. Bitte versuchen Sie es später nochmal</font></center>";
}
}

?>

Dann sollte ich die Seite mit
CODE seite.php?toemail=meine@email.ch
öffnen. Die Textdarstellung klappte auch, aber als ich die mail verschicken wollte, kam die fehlermeldung, die ich eingegeben hatte, also "Die E-Mail konnte nicht ...". Was habe ich falsch gemacht? ich habe alles mögliche probiert!
unsure.gif
 
Das hat leider auch nichts gebracht. Es kommt wieder die von mir eingegebene Fehlernachricht.
unsure.gif
Es hätte mich aber auch gewundert, denn als ich den Empfänger noch mit einem Textfeld bestummen hatte, klappte es.
huh.gif

Das sah dann so aus:CODE
<?php

if(!isset($action)){

?>


<form name="form1" method="post" action="<?php echo $PHP_SELF;?>">
<input name="action" type="hidden" value="send">
<table width="394" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="86" ><b>Von:</b></td>
<td width="300" ><input name="fname" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>Absender E-Mail:</b></td>
<td width="300" ><input name="femail" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>An E-Mail:</b></td>
<td width="300" ><input name="toemail" type="text" size="30"></td>
</tr>

<tr>
<td width="86"><b>Betreff:</b></td>
<td width="300"><input name="subject" type="text" size="30" value=""></td>
</tr>
<tr>
<td valign="top" width="86"><b>Nachricht:</b></td>
<td width="300">
<textarea name="message" rows="5" cols="35">

</textarea>
</td>
</tr>
<tr>
<td width="86"><b>Typ:</b></td>
<td width="300">
text <input name="rdType" type="radio" value="0" checked>
  
html <input name="rdType" type="radio" value="1">
</td>
</tr>
<tr>
<td width="86"> </td>
<td width="300">
<input name="cmdSend" type="submit" value="senden"> 
<input name="cmdReset" type="reset" value="reset">
</td>
</tr>
</table>
</form>

<?php
}else{
$from = $fname . "<$femail>";
$headers = "From: $from \r\n";
$message = $message."";
if($rdType == 1){
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/html";
$message = stripslashes($message);
}else{
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/plain; charset=iso-8859-1";
}
$ok = @mail($toemail, $subject, $message, $headers);
if ($ok) {
echo "<center><font class='general'>Die E-Mail wurde erfolgreich gesendet. Vielen Dank.</font></center>";
} else {
echo "<center><font class='general'>Die E-Mail konnte nicht gesendet werden. Bitte versuchen Sie es später nochmal</font></center>";
}
}


?>


Ich weiss aber nicht, wieso es dann hier nicht geht!
 
ich bin mir gerade nicht sicher, ob diese Zeile CODE $toemail = $_GET['toemail'];

überhaupt stimmt, wenn ich die variable $toemail so mitgebe:
CODE www.domain/kontakt.php?toemail=meine@email.ch

denn wenn ich

CODE
   <td width="86" ><b>An E-Mail:</b></td>
   <td width="300" ><b><input name="toemail" type="text" size="30" value="<?php echo $toemail;?>"></b></td>

statt

CODE
  <td width="86" ><b>An E-Mail:</b></td>
  <td width="300" ><b><?php echo $toemail; ?></b></td>

einsetze, geht es plötzlich. Aber dies möchte ich nicht, da man die E-Mail-Adresse einfach ändern und so diesen Dienst misbrauchen könnte. Ausser man könnte das so regeln, dass die E-Mail nur an bestimmte Adressen verschickt werden kann, also dass $toemail nur bestimmte adressen enthalten kann. Kann mir jemand erklären, wie ich das mache?

Ich weiss, ich bin anspruchsvoll, aber ich möchte halt nur das Beste für die Besucher meiner Website
tongue.gif
 
$toemail = $_GET['toemail']; und method=post ist ein Widerspruch. Benutz $_POST['toemail'] oder gerade $_REQUEST['toemail'].

Falls es nicht funktioniert, post bitte das Ergebnis folgender Zeile:
CODE echo "$toemail<br>\n$from<br>\n$headers<br>\n$message";
(vor den Mailbefehl einsetzen.

Unterschied Post, Get siehe hier: http://www.php-labor.at/tutorials/id/10.html
 
CODE <form name="form1" method="post" action="<?php echo $PHP_SELF;?>">
<input name="action" type="hidden" value="send">
<table width="394" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="86" ><b>Von:</b></td>
<td width="300" ><input name="fname" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>Absender E-Mail:</b></td>
<td width="300" ><input name="femail" type="text" size="30"></td>
</tr>
<tr>
<td width="86" ><b>An E-Mail:</b></td>
<td width="300" ><b><?php echo $_GET['toemail']; ?></b></td>
</tr>
<tr>
<td valign="top" width="86"><b>Nachricht:</b></td>
<td width="300">
<textarea name="message" rows="5" cols="35"></textarea>
</td>
</tr>

<tr>
<td width="86"><b>Typ:</b></td>
<td width="300">
text <input name="rdType" type="radio" value="0" checked>
  
html <input name="rdType" type="radio" value="1">
</td>
</tr>

<tr>
<td width="86"> </td>
<td width="300">
<input name="cmdSend" type="submit" name="submit" value="senden"> 
<input name="cmdReset" type="reset" value="reset">
</td>
</tr>
</table>
</form>


<?php
if( isset($_POST['submit']) ) {

$toemail = $_GET['toemail'];
$subject = "Mail vom Web-Formular";
$from = $_POST['fname']." as ".$_POST['femail`];
$headers = "From: $from \r\n";
$message = $message."";


if($rdType == 1){
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/html";
$message = stripslashes($message);
}else{
$headers .= "MIME-Version: 1.0\n" . "Content-type: text/plain; charset=iso-8859-1";
}

$ok = mail($toemail, $subject, $message, $headers) || die('<center><font class='general'>Die E-Mail konnte nicht gesendet werden. Bitte versuchen Sie es später nochmal</font></center>');

if ($ok) {
echo "<center><font class='general'>Die E-Mail wurde erfolgreich gesendet. Vielen Dank.</font></center>";
}
}


?>


Mein Vorschlag !

Wenn du das näcste mal ein Script Programmierst, dann versuch mal das ganze ein wenig übersichtlicher zu gestalten ....
Mit /// Kannst du "Dokumentationen" in dein Script setzen
oder die Schleifen mit Tabs rausrücken
wink.gif

Das hilft dir bei der Fehlersuche und anderen auch .

Ich rate dir ab $_REQUEST zu nutzen !

Wenn du $_GET benutzt wird wird alles das was in der url steht in ein array gespeichert. nämlich in $_GET[''] .
Bsp.

index.php?id=home
echo $_GET['id']
wird die Ausgabe "home" sein .

genau das selbe ist mit $_POST['']

aber benutze trotzdem nicht 2mal dieselben variablen
wink.gif

also $foo und $_POST['foo']


 
Irgendwie klappt das bei mir nicht. Es kommt immer eine Fehlermeldung, die ich nicht wegbringe. Also probiere ich es anders zu lösen. Es würde auch reichen, wenn man nur bestimmte E-Mail-Adressen als Empfänger zulässt. Das wäre sogar besser. Leider weiss ich aber auch bei dem nicht, wie ich es realisieren soll und was am besten wäre. Hat dazu jemand einen Tipp?
sad.gif
 
QUOTE


QUOTE
Ich rate dir ab $_REQUEST zu nutzen !




Wieso das?




Das $_POST und $_GET getrennt sind, hat schon einen Grund.
wink.gif

Vll. ist "ich rate dir ab" falsch ausgedrückt .... um verwechslungen bei Variablen zu vermeiden bzw. das das Script einwandfrei funktioniert, sollte man das schon "richtig trennen".

Soweit ich mich erinner kann gibt es bei $_REQUEST auch Probleme mit dem SAFE_MODE, kann ich nur nicht belegen.....
 
QUOTE Soweit ich mich erinner kann gibt es bei $_REQUEST auch Probleme mit dem SAFE_MODE, kann ich nur nicht belegen.....

Das kann ich nicht bestätigen. Du hast übrigens recht, aber... der Ausdruck meiner Faulheit ist $r = $_REQUEST ;-)
 
Und wie kann ich es am einfachsten regeln, dass $toemail nur bestimmte E-Mail-Adressen beinhalten kann?
 
Wie meinst du das, nutr bestimmte email adressen beinhalten kann =??

Das man nur bestimmte Adressen eingeben kann an die die mail geschickit wird ?
Wenn ja, das kannst du mit einer ganz normalen ifelse schleife machen....

if($_GET['mailto'] == "foo@bar.de") {
mail (...);
} elseif($_GET['mailto'] == "bar@foo.tv") {
mail(...);
...
...
else {
die('diese mailadresse ist nicht gültig');
}
Das Formular kann man mit einer schönen Liste ausstatten und denn kann man sich den Empfänger aussuchen.....

falls du das so meintest

 
Zurück
Oben