Wie kann ich folgendes umsetzten?

Guten Abend,

hab hier mal ein Script, wo der User eine Nachricht an mich schicken kann. Da ich habe ein paar Mail Adressen haben, möchte ich, dass der User via DropDown Liste ein Betreff auswählen kann z.B. Bilder dann soll es eben an bilder@xx.de gehen wenn ich Privat auswählt, dann soll die Mail eben an privat@xx.de gehen.

Kann mir da jemand helfen, wie ich das umsetzten kann.

Hier kommt mal das Skript von mir:

PHP:
<?php
 if (isset($_POST["form_submitted"]))
  {
   // &uuml;bergebene Variablen ermitteln:
   $name = $_POST['name'];
   $email = $_POST['email'];
   $subject = $_POST['subject'];
   $text = $_POST['text'];
 
   // &Uuml;berpr&uuml;fungen der Daten:
   unset($errors);
   if ($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "die E-Mail-Adresse sieht nicht richtig aus";
   if ($text == "") $errors[] = "es wurde kein Text eingegeben";
   if ($_FILES['probe']['size'] > $max_attach_size) $errors[] = "Attachment zu gro&szlig; (".number_format($_FILES['probe']['size']/1000,0,",","")." KB) - Maximalgr&ouml;&szlig;e: ".number_format($max_attach_size/1000,0,",","")." KB";
 
   if (empty($errors))
    {
 	$text = stripslashes($text);
 	$subject = stripslashes($subject);
 	if ($name != "") $mail_name=$name; else $mail_name="unbekannt";
 	if ($subject != "") $mail_subject = $subject; else $mail_subject = "kein Betreff";
 	if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
 	$ip = $_SERVER["REMOTE_ADDR"];
 
 	// Wenn Attachment, dann MIME-Mail erstellen:
 	if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "")
 	 {
 	  // Datei einlesen und codieren:
 	  $datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
 	  $datei_content = chunk_split(base64_encode($datei_content),76,"\n");
 
 	  // Boundary festlegen:
 	  $boundary = md5(uniqid(rand()));
 
 	  // Mail-Header:
 	  $mail_header = "From: ".$mail_name." <".$mail_email.">\n";
 	  $mail_header .= "X-Sender-IP: ".$ip."\n";
 	  $mail_header .= "MIME-Version: 1.0\n";
 	  $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
 	  $mail_header .= "This is a multi-part message in MIME format.\n";
 	  // Mail-Text:
 	  $mail_header .= "--".$boundary;
 	  $mail_header .= "\nContent-Type: text/plain";
 	  $mail_header .= "\nContent-Transfer-Encoding: 8bit";
 	  $mail_header .= "\n\n".$text;
 	  // Attachment:
 	  $mail_header .= "\n--".$boundary;
 	  $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name=\"".$_FILES['probe']['name']."\"";
 	  $mail_header .= "\nContent-Transfer-Encoding: base64";
 	  $mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['probe']['name']."\"";
 	  $mail_header .= "\n\n".$datei_content;
 
 	  // Ende:
 	  $mail_header .= "\n--".$boundary."--";
 	  // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
 	  if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
 	 }
 	// kein Attachment, normale E-Mail:
 	else
 	 {
 	  $mail_header = "From: ".$mail_name." <".$mail_email.">\n";
 	  $mail_header .= "X-Sender-IP: $ip\n";
 	  $mail_header .= "Content-Type: text/plain";
 	  if (@mail($mailto,$mail_subject,$text,$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
 	 }
 
 	// Kopie an Absender:
 	if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy']))
 	 {
 	  if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "") $copy_mail_text = "Kopie der versendeten E-Mail:\n\n".$text."\n\nAttachment: ".$_FILES['probe']['name']; else $copy_mail_text = "Kopie der versendeten E-Mail:\n\n".$text;
 	  $header= "From: ".$mailto."\n";
 	  $header .= "X-Sender-IP: ".$ip."\n";
 	  $header .= "Content-Type: text/plain";
 	  @mail($email, $mail_subject, $copy_mail_text, $header);
 	 }
    }
  }
 
 if (empty($sent))
  {
   if(isset($errors))
    {
 	?>
 					 <p class="caution">Fehler:</p>
 					 <ul>
 					   <?php foreach($errors as $f) { ?>
 					   <li><?php echo $f; ?></li>
 					   <?php } ?>
 					 </ul>
 					 <br />
 					 <?php
    }
 
   ?>
 					 <form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" enctype="multipart/form-data">
 					   <div>
 						 <p><b>Name:</b><br />
 							 <input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" />
 						 </p>
 						 <p><b>E-Mail:</b><br />
 							 <input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" />
 						 </p>
 						 <p><b>Betreff:</b><br />
 							 <input type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""; ?>" size="35" />
 						 </p>
 						 <p><b>Nachricht:</b><br />
 							 <textarea name="text" cols="70" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?>
 					   </textarea>
 						 </p>
 						 <p><b>Attachment:</b><br />
 							 <input type="file" name="probe" value="<?php if (isset($_POST['probe'])) echo htmlentities(stripslashes($_POST['probe'])); else echo ""; ?>" size="20"/>
 						 </p>
 						 <br />
 						 <p>
 						   <input type="submit" name="form_submitted" value="&gt;&gt;&gt; Absenden" />
 						   <input type="checkbox" name="copy" value="true" />
 	  Kopie an Absender</p>
 					   </div>
 					 </form>
 					 <?php
  }
 else
  {
   if (empty($email)) { ?>
 					 <p><b>Danke!</b><br />
 					   Nachricht erfolgreich versendet. Allerdings wurde keine E-Mail-Adresse angegeben, ich kann also nicht antworten.</p>
 					 <?php }
   else { ?>
 					 <p><b>Danke!</b><br />
 					   Nachricht erfolgreich versendet.</p>
 				   <?php }
  }
 ?>

So wo die Mail hingehen soll, das habe ich so festgelegt:

PHP:
# Adresse, an die die Formulardaten gesendet werden sollen:
 $mailto = "XX@web.de";
 
 # Maximale Größe des Attachments in Bytes:
 $max_attach_size = 500000;
 ?>

Joa das geht auch, aber wie muss ich das jetzt eben machen, dass ich das so machen kann wie ich das oben gerade geschrieben habe? Bzw. geht das überhaupt?

Gruß Claudia
 
Dazu brauchst du im Formular natürlich erst mal das DropDown-Menü. Wenn du im DropDown-Menü den Betreff der Email auswählen möchtest, ersetzt du dein bisheriges Textfeld, das für den Betreff gedacht war, durch folgendes DropDown-Menü:
HTML:
<select name="subject">
  <option value="Bilder">Bilder</option>
  <option value="Privat">Privat</option>
</select>
Die "value" im <option>-Tag entspricht hierbei der Betreffszeile (und dem vorderen Teil der Empfängeradresse, wobei diese noch in Kleinbuchstaben umgewandelt wird), das was zwischen den <option>-Tags steht, wird im DropDown-Menü angezeigt ;)

Dann musst du unter den Zeilen
PHP:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$text = $_POST['text'];
noch folgende hinzufügen;
PHP:
$mailto = strtolower($_POST["subject"]."xx.de");
# wobei du hier noch das "xx.de" durch die tatsächliche Domain ersetzen musst ;)
Jetzt werden die Bilder an bilder@xx.de geschickt, die privaten Mails an privat@xx.de, usw. Du musst nur das DropDown-Menü entsprechend ergänzen!

Die Empfängeradresse ($mailto = "xx@web.de") musst du natürlich nicht mehr definieren, da diese jetzt mit dem Formular übergeben wird.
 
@split,

danke für deine Ausführliche Bescheibung. Werde das gleich mal versuchen :-) wenn ich noch Fragen habe, dann melde ich mich wieder. Aber noch was. Wie sicher ist das denn? Oder muss ich da noch was beachten? Also ich will eben nicht, dass jemand die Mail Adresse raus bekommt, aber das ist hier ja ausgeschlossen oder?

Wünsch dir noch einen schönen Abend und einen schönen Sonntag.

Gruß Claudia
 
@split,

So da bin ich nochmal :-) Hab da doch noch eine Frage. Oben hast du gerade folgendes geschrieben:

Jetzt werden die Bilder an bilder@xx.de geschickt, die privaten Mails an privat@xx.de, usw. Du musst nur das DropDown-Menü entsprechend ergänzen!

Na ja aber was mache ich jetzt, wenn ich nicht die Mail Adresse bilder.web.de habe? Also ich will einfach wenn man auf Bilder klickt, dass man dann z.B. an bilder.privat.claudia@web.de die mail geht usw.

das heißt jetzt da wo du

PHP:
<option value="Bilder">Bilder</option>

geschrieben hast, muss ich wo value="Bilder" muss ich dann z.B. schreiben bilder.privat.claudia oder habe ich da etwas falsch verstanden?

Währe nett, wenn du mir das noch beantworten kannst.


@SilentWarrior,

ah dann bin ich aber froh :-)

Gruß Claudia
 
Währe nett, wenn du mir das noch beantworten kannst.
Hm... das kann eigentlich auch ich machen. :-)

Am besten machst du es so, dass du verschiedene Input-Felder machst (eben z. B. mit value="Bilder", value="Privat" usw.) und dann eine Fallunterscheidung machst:
PHP:
switch($_POST['subject']) {
    case 'Bilder':
        $mail = 'bilder.claudia@web.de';
    break;

    default:
    case 'Privat':
        $mail = 'privat.claudia@web.de';
    break;
}
Mehr zum Thema gibt's wie immer bei PHP.net: [phpf]switch[/phpf].
 
Wenn du value="bilder.privat.claudia" schreibst, wird das auch im Betreff angezeigt ;-]
Dann musst du einfach im Quellcode folgende Zeile ändern:
PHP:
$mailto = strtolower($_POST["subject"]."xx.de");

#ändern in:
$mailto = strtolower($_POST["subject"].".privat.claudia@web.de");
Jetzt werden alle Mails an [value der Option in Kleinbuchstaben].privat.claudia@web.de geschickt (z.B. bilder.privat.claudia@web.de, privat.privat.claudia@web.de)

Ich glaub aber, ich hab dich falsch verstanden (oder du hast dich falsch ausgedrückt :suspekt:). Wenn du willst, dass die Mails an [value der Option in Kleinbuchstaben].claudia@web.de geschickt werden (z.B. bilder.claudia@web.de, privat.claudia@web.de) änderst du die oben genannte Zeile eben nochmal um *g*
PHP:
$mailto = strtolower($_POST["subject"].".claudia@web.de");
PS: In meiner ersten Code-Änderung ist ein Fehler, ich hab bei der "$mailto = "-Zeile das @ vergessen :-(

Und... nein, deine Emailadresse bekommt mit Sicherheit keiner raus, vorallem nachdem sie hier im Thread ca. 5 mal gepostet wurde ^^
 
@split,

Guten Morgen,

danke für deine Antwort. Aber ich glaube ich habe mich nicht richtig ausgedrückt oder du hast mich nicht richtig verstanden. Ich erkläre es dir einfach nochmals was ich genau will bzw. vor habe.

Also ich habe ein Formular. Da gibts folgende Felder:

Name:

Vorname:

Mail Adresse:

Betreff:

Auswahl:

Text:

Joa und bei Auswahl soll dann eben folgendes stehen:

Privat
Bilder
Sonstiges:

So wenn man nun Privat auswählt, dann soll eben die Mail an z.B. 123@web.de geschickt werden. Wenn man aber Bilder auswählt, dann soll die Mail eben an 456@web.de geschickt werden und wenn man Sonstiges auswählt, dann soll die Mail z.B. an 789@web.de geschickt werden.

Verstehst du nun was ich genau meine? Wenn du noch auf bist, dann kannst dich ja nochmals melden :-)

Gruß Claudia
 
Ja, ich bin noch auf ^^ oder wieder.

Gut, dann mach erst mal das Formular:
HTML:
<form>
Name: <input type="text" name="name">
Vorname: <input type="text" name="vorname">
Mailadresse: <input type="text" name="email">
Betreff: <input type="text" name="subject">
Auswahl: 
<select name="mailto">
<option value="bilder">Bilder</option>
<option value="privat">Privat</option>
<option value="sonstiges">Sonstiges</option>
...
</select>

Text: <textarea name="text">
</form>
Und dann noch den PHP-Code für die übermittelten Variablen anpassen:
PHP:
$mailadressen = array();
$mailadressen["bilder"] = "bildermail@adresse.de";
$mailadressen["privat"] = "privatemail@adresse.de";
$mailadressen["sonstiges"] = "sonstiges@adresse.de";
#Hier musst du entsprechend der Auswahlmöglichkeiten im Empfänger-DropDown-Menü die Empfänger abhängig der Werte einstellen
#Beispiel:
#im Formular: <option value="bilder">
#Hier im Array: $mailadressen["bilder"] = "empfaenger@adresse.de";

$name = $_POST["vorname"]." ".$_POST["name"];
$email = $_POST["email"];
$subject = $_POST["subject"];
$text = $_POST["text"];
if(isset($mailadressen[$_POST["mailto"]])) {
   $mailto = $mailadressen[$_POST["mailto"]];
} else {
   die("Keinen g&uuml;ltigen Empf&auml;nger ausgew&auml;hlt!");
}
Zuerst wird der Name aus Vorname und Name zusammengesetzt.
Dann wird die Emailadresse in eine andere Variable gespeichert.
Dann wird der Betreff in eine andere Variable gespeichert.
Und am Schluss wird dann noch die Emailadresse mit Hilfe des Arrays $mailadressen bestimmt. Sollte zum ausgewählten Wert des Empfänger-DropDown-Menüs keine Emailadresse existieren (d.h. du hast einen Fehler bei der "Konfiguration" gemacht ^^ oder der User hat es irgendwie versäumt, einen Wert auszuwählen (z.B. eigenes Formular)).

Dass du im Array $mailadressen alle möglichen Emailadressen eintragen musst, steht ja im Quelltext...

Hab ich dich jetzt richtig verstanden? ;)
 
@split,

hey danke für dich nochmals ausführliche Beschreibung :-) Du hast das genau richtig verstanden genau das habe ich noch gesucht. DANKE DANKE DANKE

Joa werde mich jetzt an was anderes machen. Wenn ich Fragen habe, dann melde ich mich einfach bei dir. Weißt ja um was es geht * bsg *

Gruß Claudia
 
Zurück