Ergebnis 1 bis 5 von 5

Thema: Empfänger-Adresse für die Option per E-Mail versenden überschreiben

  1. #1
    Contao-Nutzer Avatar von wschwaig
    Registriert seit
    08.04.2011.
    Ort
    Maria Alm am Steinernen Meer
    Beiträge
    92

    Standard Empfänger-Adresse für die Option per E-Mail versenden überschreiben

    Hallo Zusammen,

    Um die Empfänger-Adresse für die Option per E-Mail versenden in den Fomulareinstellungen zu überschreiben, habe ich folgenden Code für den 'processFormData' Hook erstellt.
    PHP-Code:
    public function replaceRecipient($arrPost$arrForm$arrFiles) {
        
    /* if a recipient is defined replace it */
        
    if ($arrPost["recipient"] && Validator::isEmail($arrPost["recipient"])) {
            
    $recipient $arrPost["recipient"];
            
    /* replace form recipient */
            
    $arrForm["recipient"] = $recipient;
            
    $arrForm["subject"] = "Angepasster Betreff";
            
            
    $template $arrForm["Template"];
            
    $template->recipient $recipient;
            
    $template->subject "Angepasster Betreff";
            
            
    /* store back the template after the changes where made */
            
    $arrForm["Template"] = $template;
            
            
    var_dump($arrForm);
        }

    Leider scheint diese nicht zu funktionieren. Ist das den überhaupt möglich? Beim
    PHP-Code:
    var_dump($arrForm); 
    sind die Daten richtig vorhanden. Aber die Email wird immer noch mit den Backend-Einstellungen versendet. Auch die Anpassung auf
    PHP-Code:
    &$arrForm 
    bringt keinen Erfolg.

    Danke für eure Hilfe.

    viele Grüße
    Wolfgang

  2. #2
    Contao-Nutzer Avatar von wschwaig
    Registriert seit
    08.04.2011.
    Ort
    Maria Alm am Steinernen Meer
    Beiträge
    92

    Standard ... die Lösung

    ... nach einem Tag die Lösung für mein Problem; Wer eine Bessere hat, soll mich bitte darauf aufmerksam machen. Potentielle Sicherheitslücken auch bitte, danke.
    PHP-Code:
    <?php

    /**
     * Replace Recipient Module
     *  
     * Copyright (C) 2005-2013 Wolfgang Schwaiger
     * 
     * @author    Wolfgang Schwaiger, wolfgang.schwaiger@qualitywork.at
     * @link      http://qualitywork.at
     * @license   http://www.gnu.org/licenses/lgpl-3.0.html LGPL
     * @copyright qualitywork.at
     */
    class ReplaceRecipientClass {

        public function 
    replaceRecipient($arrPost$arrForm$arrFiles NULL) {
            
    /* is this a form submit */
            
    if ($arrPost['FORM_SUBMIT']) {
                
    /* if a recipient is defined replace it */
                
    if ($arrPost["qw_recipient"] && Validator::isEmail($arrPost["qw_recipient"])) {
                    
    $recipient $arrPost["qw_recipient"];
                } else {
                    
    /* send email to the recipient defined */
                    
    $recipient $arrForm["recipient"];
                }

                unset(
    $arrPost["qw_recipient"]);
                unset(
    $arrPost["FORM_SUBMIT"]);
                unset(
    $arrPost["REQUEST_TOKEN"]);

                
    $_SESSION['FORM_DATA'] = $arrPost;

                
    $keys = array();
                
    $values = array();
                
    $fields = array();
                
    $message '';

                foreach (
    $arrPost as $k => $v) {
                    if (
    $k == 'cc') {
                        continue;
                    }

                    
    $v deserialize($v);

                    
    // Skip empty fields
                    
    if ($arrForm['skipEmpty'] && !is_array($v) && !strlen($v)) {
                        continue;
                    }

                    
    // Add field to message
                    
    $message .= (isset($arrForm[$k]) ? $arrForm[$k] : ucfirst($k)) . ': ' . (is_array($v) ? implode(', '$v) : $v) . "\n";

                    
    // Prepare XML file
                    
    if ($arrForm['format'] == 'xml') {
                        
    $fields[] = array
                            (
                            
    'name' => $k,
                            
    'values' => (is_array($v) ? $v : array($v))
                        );
                    }

                    
    // Prepare CSV file
                    
    if ($arrForm['format'] == 'csv') {
                        
    $keys[] = $k;
                        
    $values[] = (is_array($v) ? implode(','$v) : $v);
                    }
                }

                
    $recipients = \String::splitCsv($recipient);

                
    // Format recipients
                
    foreach ($recipients as $k => $v) {
                    
    $recipients[$k] = str_replace(array('['']''"'), array('<''>'''), $v);
                }

                
    $email = new \Email();

                
    // Get subject and message
                
    if ($arrForm['format'] == 'email') {
                    
    $message $arrPost['message'];
                    
    $email->subject $arrForm['subject'];
                }

                
    // Set the admin e-mail as "from" address
                
    $email->from $GLOBALS['TL_ADMIN_EMAIL'];
                
    $email->fromName $GLOBALS['TL_ADMIN_NAME'];

                
    // Get the "reply to" address
                
    if (strlen(\Input::post('email'true))) {
                    
    $replyTo = \Input::post('email'true);

                    
    // Add name
                    
    if (strlen(\Input::post('name'))) {
                        
    $replyTo '"' . \Input::post('name') . '" <' $replyTo '>';
                    }

                    
    $email->replyTo($replyTo);
                }

                
    // Fallback to default subject
                
    if (!strlen($email->subject)) {
                    
    $email->subject $arrForm['subject'];
                }

                
    // Send copy to sender
                
    if (strlen($arrPost['cc'])) {
                    
    $email->sendCc(\Input::post('email'true));
                    unset(
    $_SESSION['FORM_DATA']['cc']);
                }

                
    // Attach XML file
                
    if ($arrForm['format'] == 'xml') {
                    
    $objTemplate = new \FrontendTemplate('form_xml');

                    
    $objTemplate->fields $fields;
                    
    $objTemplate->charset $GLOBALS['TL_CONFIG']['characterSet'];

                    
    $email->attachFileFromString($objTemplate->parse(), 'form.xml''application/xml');
                }

                
    // Attach CSV file
                
    if ($arrForm['format'] == 'csv') {
                    
    $email->attachFileFromString(\String::decodeEntities('"' implode('";"'$keys) . '"' "\n" '"' implode('";"'$values) . '"'), 'form.csv''text/comma-separated-values');
                }

                
    // Send e-mail
                
    $email->text = \String::decodeEntities(trim($message)) . "\n\n";
                
    $email->sendTo($recipients);

                return;
            }
        }

    }

    ?>
    Damit der Code funktioniert muss man im Back-End die Option Formular-Daten per Email versenden deaktivieren. Allerdings die Felder ausfüllen, damit man Email/Betreff/Art für den Versand mit dem Script bekommt. Have fun using it. Bei Fragen einfach melden.

    viele Grüße,
    Wolfgang
    Geändert von wschwaig (21.03.2013 um 21:08 Uhr)

  3. #3
    Contao-Nutzer Avatar von wschwaig
    Registriert seit
    08.04.2011.
    Ort
    Maria Alm am Steinernen Meer
    Beiträge
    92

    Standard ... ein Sicherheitsloch, ACHTUNG

    Zitat: "Ihre jetzige Lösung ist leider ein offenes Tor für Spammer, denn über "qw_recipient" kann man beliebige Empfänger angeben und diesen im Namen des Website-Betreibers Nachrichten schicken. Aus genau diesem Grund bietet der Core auch keine Möglichkeit, den Empfänger dynamisch zu setzen." (Leo Feyer)

    Danke für den Input ... ich arbeite an einer Lösung, wo man mit IDs arbeitet und keine Email-Adressen in der Urls hat.

    wolfgang

  4. #4
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Im Falle der Nutzung von efg ist das wohl möglich einen Empfänger zu überschreiben. Vielleicht passt das ja für dich.

    http://www.tl-usertreffen.weitzeldesign.com/efg-6.html

  5. #5
    Contao-Nutzer Avatar von wschwaig
    Registriert seit
    08.04.2011.
    Ort
    Maria Alm am Steinernen Meer
    Beiträge
    92

    Standard

    ... danke für die Antwort. Leider nein, die Möglichkeit habe ich schon versucht, bin aber leider nicht ans Ziel gekommen. Das Sicherheitsloch kann übrigens einfach mit einer Whitelist gestopft werden. Sprich ein Array mit Adressen, die verarbeitet werden dürfen. Ich versuche das noch in einer Erweiterung unterzubringen, damit man die Whitelist bequem in Backend warten kann, pro Formular.

    woifi

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •