PHP
Von: Informatontechnik, 27.9.2011 08:18 Uhr
Hallo Ihr alle....

folgendes ich habe ein Formmailer der ganz gut funktioniert - also so wie er auch soll. Nun ist es so dass der Formmailer nur für ein empfänger gedacht ist und nicht für mehrere. Der Jenige der eine Mail schreiben will über diesen Formmailer, soll die Möglichkeit erhalten über ein Drap&Drop Feld oder ähnliches den Empfänger auswählen zu können. Wie realisiere ich dies?

Unten ist der PHP-Code vom aktuellen Stand des Formmailers. Ich sage auch hiermit schon mal DANKE.

<?php

// *** Einstellungen ***
$mail_to ='XXXXXX@XXXXX.de'; // Mailadresse (Empfängeradresse)

// #############################################################################
$from_name=GetParam('fromname');
$from_mail=strtolower(GetParam('frommail'));
$mail_subject=GetParam('mailsubject');
$mail_text=GetParam('mailtext');
$send=GetParam('s');

$err_text='';
if(trim($from_name)=='') $err_text.='Bitte geben Sie Ihren Namen an.<br>';
if(trim($from_mail)=='')
$err_text.='Bitte geben Sie Ihre E-Mail-Adresse an.<br>';
else
if(!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$/i',$from_mail))
$err_text.='Bitte geben Sie eine gültige E-Mail-Adresse an.<br>';
if(trim($mail_subject)=='') $err_text.='Bitte geben Sie einen Betreff ein.<br>';
if(trim($mail_text)=='') $err_text.='Bitte geben Sie einen Nachrichtentext ein.<br>';

// *** Zu langen Text abschneiden ***
if(strlen($mail_text)>4500) {
$mail_text=substr($mail_text,0,4500).'... (Text wurde gekürzt!)';
}
$from_name=str_replace(chr(34),"''",$from_name);
$mail_subject=str_replace(chr(34),"''",$mail_subject);
$from_name=stripslashes($from_name);
$from_mail=stripslashes($from_mail);
$mail_subject=stripslashes($mail_subject);
$mail_text=stripslashes($mail_text);

if (($send == '1') && ($err_text != '')) {
echo '<p><big>Fehler:</big><br>';
echo $err_text.'</p>';
}

if (($send != '1') || ($err_text != '')) {
?>

<form action="<?=GetParam('PHP_SELF','S')?>" method="post">
<table border=0 cellspacing=2 cellpadding=0 width=100%>
<tr><td nowrap align=right>Ihr Name:</td><td> </td>
<td width=100%><input type="text" name="fromname" size=50 maxlength=120 value="<?=$from_name?>"></td></tr>
<tr><td nowrap align=right>Ihre E-Mail-Adresse:</td><td></td>
<td width=100%><input type="text" name="frommail" size=50 maxlength=120 value="<?=$from_mail?>"></td></tr>
<tr><td nowrap align=right>Betreff:</td><td></td>
<td width=100%><input type="text" name="mailsubject" size=50 maxlength=120 value="<?=$mail_subject?>"></td></tr>
<tr><td nowrap align=right valign=top>Text:<br>
(max. 4.500 Zeichen)</td>
<td></td>
<td width=100%><textarea cols=40 rows=10 name="mailtext"><?=$mail_text?></textarea></td></tr>
<tr><td></td><td></td><td>
<input type="hidden" value="1" name="s">
<input type="submit" value="Nachricht versenden" name="submit">
</td></tr>
</table>
</form>

<?php
} else {
$header="From: $from_name <$from_mail>\n";
$header.="Reply-To: $from_mail\n";
$header.="X-Mailer: PHP-ContactForm-Script\n";
$header.="Content-type: text/plain; charset=UTF-8\n";
$mail_date=gmdate('D, d M Y H:i:s').' +0000';
$send=0;
if(@mail($mail_to,$mail_subject,$mail_text,$header))
{
echo "<p>Die Nachricht wurde erfolgreich abgesendet.</p>";
echo "<p><a href=\"".GetParam('PHP_SELF','S')."?from_name=$from_name&from_mail=$from_mail\">Zurück zum Formular</a></p>";
}else{
echo "<p>Beim Versenden der Nachricht ist ein Fehler aufgetreten!</p>";
echo "<p><a href=\"".GetParam('PHP_SELF','S')."?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
echo urlencode($mail_text)."\">Zurück zum Formular</a></p>";
}
}

function GetParam($ParamName, $Method = 'P', $DefaultValue = '') {
if ($Method == 'P') {
if (isset($_POST[$ParamName])) return $_POST[$ParamName]; else return $DefaultValue;
} else if ($Method == 'G') {
if (isset($_GET[$ParamName])) return $_GET[$ParamName]; else return $DefaultValue;
} else if ($Method == 'S') {
if (isset($_SERVER[$ParamName])) return $_SERVER[$ParamName]; else return $DefaultValue;
}
}
?></p>



  1. Antwort von ibomania 5
    Re: Formmailer erweitern durch Auswahl
    Hallo

    Ich habe es folgendermassen gelöst:

    Ich habe für jede email-Adresse, welche zur Auswahl stehen soll eine Datei z.B. email_1.php erstellt

    <title>EADR_1</title>
    <?
    $to="name@domain.de";
    $wer="Frau Musterfrau";
    ?>

    in dem Moment, wenn das Formular abgeschickt wird, also wenn alle Eingaben gemacht sind und der Kunde auf Senden drückt, wird

    include($anwen.".php");

    ausgewählt und eingebettet - also die entsprechende Datei.

    in Dein Formular baust Du am besten als erste Eingabemöglichkeit folgendes ein:

    - - - - - - - -
    Kontakt mit:<br>
    <?php if(!$anwen)
    {echo"<select style=\"width: 160px; margin: 5px 5px 0 0;\">
    <option value=\"---\">Adresse wählen...</option>
    <option value=\"email_1\" <?if($anwen==\"email_3\"){echo\"selected\";}?>>Abteilung 1</option>
    <option value=\"email_2\" <?if($anwen==\"email_2\"){echo\"selected\";}?>>Abteilung 2</option>
    <option value=\"email_3\" <?if($anwen==\"email_1\"){echo\"selected\";}?>>Abteilung 3</option></select>";
    }
    else
    {
    include($anwen).".php";
    echo$wer;
    }?> aufnehmen *<br>

    - - - - - - - -

    Das ich hier die Datei ein 2. Mal include (welches eigentlich vor dem 1. Mal passiert in der Programmabfolge) ist zur Darstellung des Namens, welcher in der Datei gespeichert ist.

    Das ich die Adressen in extra Dateien speichere ist ein kleiner Schutz gegen email-Sammler (Spam-Schutz)

    Das Beispiel kannst Du Dir auf

    http://www.wohn-und-pflegezentrum.de/index.php?p=802

    ansehen


    Bei Fragen sende mir eine email

    info@ibomedia.de


    mfg
    Oliver Strauß
    • Antwort von PeterZ. 2
      Re: Formmailer erweitern durch Auswahl
      Wenn ein dropdown ok ist, dann
      ... durch passende werte ersetzen

      <select name="werbekommts" ....>
      <options value="1@Domain.de" >empfangen1<options>
      </ select>
      In das Formular rein.

      Und im php des mailversand noch:
      $mail_to = $_post['werbekommts'];

      3 Kommentare
      • Re^2: Formmailer erweitern durch Auswahl
        Ihre Idee finde ich nicht schlecht und habe diese eingesetzt. Allerdings versendet er nun keine Mails mehr. Zumindest kommen die bei mir nun nicht mehr an. Unten der aktuelle PHP-Code:


        <?php

        // *** Einstellungen ***
        $mail_to = $_post['empfaenger'];// Ihre Mailadresse (Empfängeradresse)

        // #############################################################################
        $empfaenger=GetParam('empfaenger');
        $from_name=GetParam('fromname');
        $from_mail=strtolower(GetParam('frommail'));
        $mail_subject=GetParam('mailsubject');
        $mail_text=GetParam('mailtext');
        $send=GetParam('s');

        $err_text='';
        if(trim($empfaenger)=='') $err_text.='Bitte wählen Sie den Empfänger aus.<br>';
        if(trim($from_name)=='') $err_text.='Bitte geben Sie Ihren Namen an.<br>';
        if(trim($from_mail)=='')
        $err_text.='Bitte geben Sie Ihre E-Mail-Adresse an.<br>';
        else
        if(!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$/i',$from_mail))
        $err_text.='Bitte geben Sie eine gültige E-Mail-Adresse an.<br>';
        if(trim($mail_subject)=='') $err_text.='Bitte geben Sie einen Betreff ein.<br>';
        if(trim($mail_text)=='') $err_text.='Bitte geben Sie einen Nachrichtentext ein.<br>';

        // *** Zu langen Text abschneiden ***
        if(strlen($mail_text)>4500) {
        $mail_text=substr($mail_text,0,4500).'... (Text wurde gekürzt!)';
        }
        $from_name=str_replace(chr(34),"''",$from_name);
        $mail_subject=str_replace(chr(34),"''",$mail_subject);
        $from_name=stripslashes($from_name);
        $from_mail=stripslashes($from_mail);
        $mail_subject=stripslashes($mail_subject);
        $mail_text=stripslashes($mail_text);

        if (($send == '1') && ($err_text != '')) {
        echo '<p><big>Fehler:</big><br>';
        echo $err_text.'</p>';
        }

        if (($send != '1') || ($err_text != '')) {
        ?>

        <form action="<?=GetParam('PHP_SELF','S')?>" method="post">
        <table border=0 cellspacing=2 cellpadding=0 width=100%>
        <tr>
        <td nowrap align=right></td>
        <td> </td>
        <td width=100%>
        <select name="empfaenger" id="empfaenger">
        <option value="">Bitte Auswählen</option>
        <option value="webmaster@feuerwehr-eschhofen.de">Webmaster</option>
        <option value="wehrfuehrer@feuerwehr-eschhofen.de">Wehrführer</option>
        <option value="stellv.wehrfuehrer@feuerwehr-eschhofen.de">Stellv. Wehrführer</option>
        <option value="vorsitzender@feuerwehr-eschhofen.de">Vorsitzender</option>
        <option value="jugendwart@feuerwehr-eschhofen.de">Stellv. Vorsitzender</option>
        <option value="jugendwart@feuerwehr-eschhofen.de">Jugendwart</option>
        </select></td></tr>
        <tr><td nowrap align=right>Ihr Name:</td><td> </td>
        <td width=100%><input type="text" name="fromname" size=50 maxlength=120 value="<?=$from_name?>"></td></tr>
        <tr><td nowrap align=right>Ihre E-Mail-Adresse:</td><td></td>
        <td width=100%><input type="text" name="frommail" size=50 maxlength=120 value="<?=$from_mail?>"></td></tr>
        <tr><td nowrap align=right>Betreff:</td><td></td>
        <td width=100%><input type="text" name="mailsubject" size=50 maxlength=120 value="<?=$mail_subject?>"></td></tr>
        <tr><td nowrap align=right valign=top>Text:<br>
        (max. 4.500 Zeichen)</td>
        <td></td>
        <td width=100%><textarea cols=40 rows=10 name="mailtext"><?=$mail_text?></textarea></td></tr>
        <tr><td></td><td></td><td>
        <input type="hidden" value="1" name="s">
        <input type="submit" value="Nachricht versenden" name="submit">
        </td></tr>
        </table>
        </form>

        <?php
      • von PeterZ. 1
        Re^3: Formmailer erweitern durch Auswahl
        $mail_to = $_post['empfaenger'];// Ihre Mailadresse (Empfängeradresse)

        sollte unten ins <?php kurz vor die mail() funktion.

        Weiterhin ist mir gerade aufgefallen, dass das post groß geschrieben werden muss.
        Ich hatte vorhin bei meiner 1. Antwort vom Handy aus geschrieben und nicht auf Gross/Klein geachtet.

        Wenn das Groß geschrieben ist und noch nicht funktioniert, schaue ich nochmal genauer drüber.

        Ich würde an Ihrer Stelle auch <?= gegen <?php echo austauschen.
        Irgendwann wird das Script sonst nicht mehr laufen (Serverwechsel, neue PHP Version in der es die Funktion nicht mehr gibt o.ä.) und dann kommt das große Suchen was es sein könnte.
      • Re^4: Formmailer erweitern durch Auswahl
        Hallo Danke für die Info.

        Allerdings kann ich direkt nichts damit anfangen bzw. verstehe nicht was Sie wollen. Würden Sie es einfach mal oben in den PHP-Script einbauen, vielleicht auch dicker schreiben die jeweilige Stelle damit ich es kapiere? Danke.
    • Antwort von ramon1611 (abgemeldet) 1
      Re: Formmailer erweitern durch Auswahl
      Hallo
      Leider kann ich dir hier nicht weiterhelfen, ich bin nicht sehr gut in PHP
      • Antwort von Mudder 0
        Re: Formmailer erweitern durch Auswahl
        Zuerst musst du in dein Formular natürlich ein select-Feld integrieren damit der User auswählen kann wohin es geschickt werden soll.

        <select name="receiver">
          <option value="a">Empfänger A</option>
          <option value="b">Empfänger B</option>
        </select>
        


        Im PHP-Script muss nun $mail_to gesetzt werden. Dies macht man am besten mit einer Empfänger-Liste damit man selber die Kontrolle über die Adressen behält. Ich nehm hier mal deine Variante für die POST-Werte:

        $list = array();
        $list['a'] = "abc@def.de";
        $list['b'] = "123@456.de";
        $receiver = GetParam('receiver');
        $mail_to = $list[$receiver];