... 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