Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(
Posted: Mon Mar 17, 2008 9:59 am
Hallo,
ich habe mich mal drangesetzt und mit meinen (bescheidenen) Kenntnissen den vorhandenen Formmailer überarbeitet. Dabei habe ich dann die Versions-Nr. 1.5 vergeben
Hier die wesentliche Änderungen:
- Zum universellen Einsatz wurde der Formularteil als Template ausgelagert. Es sind also mindestens zwei Dateien im Ordner plugins vorhanden (form_tpl_1.php, function.contact_form.php).
- Weitere Felder können eingefügt werden
- Parameter "mailsubject" für Betreff-Zeile der E-Mail eingefügt
- Parameter "template" für Templateauswahl eingefügt
- Optionaler Empfänger "Bcc" hinzugefügt
- Bestätigungsmail geht immer an Absender
- Eingaben werden mit "strip_tags" geprüft
Mit dem wählbaren Betreff wird die Zuordnung ankommenden Mails sehr erleichtert. Der Code müsste noch entrümpelt werden.
Leider werden die Umlaute (Mailname, Text usw.) verstümmelt. Habe da Hinweise aus dem Forum ohne Erfolg probiert.
Meine Bitte:
Seht euch mal das Teil an und gebt mir einen Tipp, wie die Umlaute richtig dargestellt werden. Wer will, kann das Script für sich verwenden. Näher Info über das Forum oder per PM.
Vielen Dank für eure Hilfe!
Gruß m266
Hier der Code:
(Template)
modules['Captcha']))
{
if (!empty($_POST['captcha_resp'])) { $captcha_resp = $_POST['captcha_resp']; }
}
//Mail headers
$extra = "From: $name \r\n";
$charset = isset($gCms->config['default_encoding']) && $gCms->config['default_encoding'] != '' ? $gCms->config['default_encoding'] : 'utf-8';
$extra .= "Content-Type: text/plain; charset=" . $charset . "\r\n";
// Fehlermeldungen
if (empty($name)) $errors .= "\t\t" . 'Bitte den Namen eingeben' . "\n";
if (empty($email)) $errors .= "\t\t" . 'Bitte eine Mailadresse eingeben' . "\n";
elseif (!validEmail($email)) $errors .= "\t\t" . 'Die Mailadresse ist ungültig' . "\n";
if (empty($subject)) $errors .= "\t\t" . 'Bitte den Betreff eingeben' . "\n";
if (empty($message)) $errors .= "\t\t" . 'Bitte die Nachricht eingeben' . "\n";
if (FALSE == empty($params['captcha']) && $params['captcha'] && isset($gCms->modules['Captcha']))
{
if (empty($captcha_resp)) $errors .= "\t\t" . 'Bitte den Sicherheitscode eingeben' . "\n";
elseif (! ($captcha->checkCaptcha($captcha_resp))) $errors .= "\t\t" . 'Der Sicherheitscode war nicht korrekt. Bitte neu eingeben!' . "\n";
}
// Fehlermeldungen ausgeben
if (!empty($errors)) {
echo '' . "\n";
echo ' Fehler : ' . "\n";
echo "\t\n";
echo $errors;
echo "\t\n";
echo "";
}
// Mailformular
elseif (@mail(
$to,
$formname,
"----------------------------------------------------------\n\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent\n"
,
$extra
))
// Mailversand OK
{
echo 'Vielen Dank für die Nachricht!' . "\n";
echo 'Soweit erforderlich setzen wir uns mit Ihnen in Verbindung.' . "\n";
// Bcc versenden?
if (!empty($params['bcc'])){
$bcc = $params['bcc'];
// Bcc-Mail
(@mail(
$bcc,
$formname,
"----------------------------------------------------------\n" .
"Bcc-Mail. Gesendet an: $to\n" .
"----------------------------------------------------------\n\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent\n"
,
$extra
));
// echo 'Bcc-Mail wurde versandt.' . "\n";
}
{
// Mail an Absender (Bestätigung)
(@mail(
$email,
$formname,
"Nachricht gesendet an:\n" .
"$formname\n\n" .
"----------------------------------------------------------\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent"
,
$extra
));
echo 'Eine Bestätigung wurde an Ihre Mailadresse versandt.' . "\n";
}
return;
}
// Ende Eingaben prüfen. Mailformulare konfigurieren
// Mailversand Fehler
else {
echo 'Beim Versenden ist ein Fehler aufgetreten!' . "\n";
return;
}
}
if (isset($_SERVER['REQUEST_URI']))
{
$action = $_SERVER['REQUEST_URI'];
}
else
{
$action = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '')
{
$action .= '?'.$_SERVER['QUERY_STRING'];
}
}
?>
" method="post">
Name:
"/>
E-Mail:
"/>
Betreff:
"/>
Nachricht:
name="message" value="" >
modules['Captcha']))
{
?>
>Bitte den Sicherheitscode eingeben:
/>
" . $captcha->getCaptcha() . '';
}
?>
/>
/>
(Script)
modules['Captcha']))
{
$captcha =& $gCms->modules['Captcha']['object'];
}
if (empty($params['email'])){
echo 'Scriptfehler: Bitte die Zieladresse im Tag eingeben.';
return;
}else{
$to = $params['email'];
}
// Formularname zuweisen
if (empty($params['mailsubject'])){
echo 'Scriptfehler: Bitte den Parameter mailsubject="Betreff-Zeile der E-Mail" im Tag eingeben.';
return;
}else{
$formname = $params['mailsubject'];
}
// Template auswählen
if (!empty($params['template'])){
$select = $params['template']; // Template-ID übernehmen
}else{
$select = "1"; // Default-ID, wenn Parameter nicht gesetzt ist (Standard-Template wird verwendet)
}
// Umgebungsvariablen zuweisen
$ip = getenv ('REMOTE_ADDR');
$host = getHostByAddr($ip);
$UserAgent = getenv ('HTTP_USER_AGENT');
$style = true; // Use default styles (true)
if (FALSE == empty($params['style']) && $params['style'] === "false" ) $style = false; // Except if "false" given in params
// Default styles (nur teilweise verwendet)
# $inputStyle = 'style="width:100%;border: 1px solid black; margin:0 0 1em 0;"'; // input boxes
# $taStyle = 'style="width:100%; border: 1px solid black; margin:0 0 1em 0;"'; // TextArea boxes (Original)
$taStyle = 'style="font-family: arial, helvetica, verdana, sans-serif;"'; // TextArea boxes
# $formStyle = 'style="width:45em; important; font-weight: bold;"'; // form (width:30em)
$errorsStyle = 'style="color: white; background-color: red; font-weight: bold; border: 3px solid black; margin: 1em;"'; // Errors box (div)
# $labelStyle = 'style="display:block;"';
# $buttonStyle = 'style="float:left; width:50%;"';
# $fieldsetStyle = 'style="padding:1em;"';
# $captchaStyle = 'style="margin-bottom:1em; text-align: center;"';
$errors=$name=$email=$subject=$message = '';
if (FALSE == empty($params['subject_get_var']) && FALSE == empty($_GET[$params['subject_get_var']]))
{
$subject = $_GET[$params['subject_get_var']];
}
?>
Scriptfehler: Das gewählte Template ist nicht vorhanden.';
break;
}
?>
What does this do?
Display's a contact form. This can be used to allow others to send an email message to the address specified.
How do I use it?
Just insert the tag into your template/page like: {contact_form email="yourname@yourdomain.com"}
If you would like to send an email to multiple adresses, seperate each address with a comma.
If you would like to send an email to Bcc, use optional parameter "bcc". (Example: bcc="admin@domain.com").
If you would like to use more HTML-Templates, set optional parameter "template". (Example: template="2").
What parameters does it take?
email - The email address that the message will be sent to.
(optional)style - true/false, use the predefined styles. Default is true.
(optional)subject_get_var - string, allows you to specify which _GET var to use as the default value for subject.
Example:
{contact_form email="yourname@yourdomain.com" subject_get_var="subject"}
Then call the page with the form on it like this: /index.php?page=contact&subject=test+subject
And the following will appear in the "Subject" box: "test subject"
(optional)captcha - true/false, use Captcha response test (Captcha module must be installed). Default is false.
(optional)bcc - If you want to send a Bcc-Mail.
(optional)template - If you want to use more HTML-Templates.
Author: Brett Batie <brett-cms@classicwebdevelopment.com> & Simon van der Linden <ifmy@geekbox.be>
Version: 1.5 (200709)
Change History:
l.2 : various improvements (errors handling, etc.)
1.3 : added subject_get_var parameter (by elijahlofgren)
1.4 : added captcha module support (by Dick Ittmann)
1.5 : Felder erweitert. Mailformular neu strukturiert (Formularteil als Template ausgelagert). Optional Bcc-Empfaenger hinzugefuegt.
Absender erhaelt immer eine Bestaetigungsmail. Template kann optional gewaehlt werden (Ohne Parameter wird Template 1 verwendet).
Parameter "mailsubject" muss eingegeben werden. (by Hans-M. Herbrand)
ich habe mich mal drangesetzt und mit meinen (bescheidenen) Kenntnissen den vorhandenen Formmailer überarbeitet. Dabei habe ich dann die Versions-Nr. 1.5 vergeben

Hier die wesentliche Änderungen:
- Zum universellen Einsatz wurde der Formularteil als Template ausgelagert. Es sind also mindestens zwei Dateien im Ordner plugins vorhanden (form_tpl_1.php, function.contact_form.php).
- Weitere Felder können eingefügt werden
- Parameter "mailsubject" für Betreff-Zeile der E-Mail eingefügt
- Parameter "template" für Templateauswahl eingefügt
- Optionaler Empfänger "Bcc" hinzugefügt
- Bestätigungsmail geht immer an Absender
- Eingaben werden mit "strip_tags" geprüft
Mit dem wählbaren Betreff wird die Zuordnung ankommenden Mails sehr erleichtert. Der Code müsste noch entrümpelt werden.
Leider werden die Umlaute (Mailname, Text usw.) verstümmelt. Habe da Hinweise aus dem Forum ohne Erfolg probiert.
Meine Bitte:
Seht euch mal das Teil an und gebt mir einen Tipp, wie die Umlaute richtig dargestellt werden. Wer will, kann das Script für sich verwenden. Näher Info über das Forum oder per PM.
Vielen Dank für eure Hilfe!
Gruß m266
Hier der Code:
(Template)
modules['Captcha']))
{
if (!empty($_POST['captcha_resp'])) { $captcha_resp = $_POST['captcha_resp']; }
}
//Mail headers
$extra = "From: $name \r\n";
$charset = isset($gCms->config['default_encoding']) && $gCms->config['default_encoding'] != '' ? $gCms->config['default_encoding'] : 'utf-8';
$extra .= "Content-Type: text/plain; charset=" . $charset . "\r\n";
// Fehlermeldungen
if (empty($name)) $errors .= "\t\t" . 'Bitte den Namen eingeben' . "\n";
if (empty($email)) $errors .= "\t\t" . 'Bitte eine Mailadresse eingeben' . "\n";
elseif (!validEmail($email)) $errors .= "\t\t" . 'Die Mailadresse ist ungültig' . "\n";
if (empty($subject)) $errors .= "\t\t" . 'Bitte den Betreff eingeben' . "\n";
if (empty($message)) $errors .= "\t\t" . 'Bitte die Nachricht eingeben' . "\n";
if (FALSE == empty($params['captcha']) && $params['captcha'] && isset($gCms->modules['Captcha']))
{
if (empty($captcha_resp)) $errors .= "\t\t" . 'Bitte den Sicherheitscode eingeben' . "\n";
elseif (! ($captcha->checkCaptcha($captcha_resp))) $errors .= "\t\t" . 'Der Sicherheitscode war nicht korrekt. Bitte neu eingeben!' . "\n";
}
// Fehlermeldungen ausgeben
if (!empty($errors)) {
echo '' . "\n";
echo ' Fehler : ' . "\n";
echo "\t\n";
echo $errors;
echo "\t\n";
echo "";
}
// Mailformular
elseif (@mail(
$to,
$formname,
"----------------------------------------------------------\n\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent\n"
,
$extra
))
// Mailversand OK
{
echo 'Vielen Dank für die Nachricht!' . "\n";
echo 'Soweit erforderlich setzen wir uns mit Ihnen in Verbindung.' . "\n";
// Bcc versenden?
if (!empty($params['bcc'])){
$bcc = $params['bcc'];
// Bcc-Mail
(@mail(
$bcc,
$formname,
"----------------------------------------------------------\n" .
"Bcc-Mail. Gesendet an: $to\n" .
"----------------------------------------------------------\n\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent\n"
,
$extra
));
// echo 'Bcc-Mail wurde versandt.' . "\n";
}
{
// Mail an Absender (Bestätigung)
(@mail(
$email,
$formname,
"Nachricht gesendet an:\n" .
"$formname\n\n" .
"----------------------------------------------------------\n" .
"Absender: $name\n\n" .
"Betreff: $subject\n\n" .
"Nachricht:\n" .
"$message \n" .
"----------------------------------------------------------\n\n" .
"Absenderangaben:\n" .
"IP-Adresse: $ip\n" .
"Host: $host\n" .
"Browser und Betriebssystem: $UserAgent"
,
$extra
));
echo 'Eine Bestätigung wurde an Ihre Mailadresse versandt.' . "\n";
}
return;
}
// Ende Eingaben prüfen. Mailformulare konfigurieren
// Mailversand Fehler
else {
echo 'Beim Versenden ist ein Fehler aufgetreten!' . "\n";
return;
}
}
if (isset($_SERVER['REQUEST_URI']))
{
$action = $_SERVER['REQUEST_URI'];
}
else
{
$action = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '')
{
$action .= '?'.$_SERVER['QUERY_STRING'];
}
}
?>
" method="post">
Name:
"/>
E-Mail:
"/>
Betreff:
"/>
Nachricht:
name="message" value="" >
modules['Captcha']))
{
?>
>Bitte den Sicherheitscode eingeben:
/>
" . $captcha->getCaptcha() . '';
}
?>
/>
/>
(Script)
modules['Captcha']))
{
$captcha =& $gCms->modules['Captcha']['object'];
}
if (empty($params['email'])){
echo 'Scriptfehler: Bitte die Zieladresse im Tag eingeben.';
return;
}else{
$to = $params['email'];
}
// Formularname zuweisen
if (empty($params['mailsubject'])){
echo 'Scriptfehler: Bitte den Parameter mailsubject="Betreff-Zeile der E-Mail" im Tag eingeben.';
return;
}else{
$formname = $params['mailsubject'];
}
// Template auswählen
if (!empty($params['template'])){
$select = $params['template']; // Template-ID übernehmen
}else{
$select = "1"; // Default-ID, wenn Parameter nicht gesetzt ist (Standard-Template wird verwendet)
}
// Umgebungsvariablen zuweisen
$ip = getenv ('REMOTE_ADDR');
$host = getHostByAddr($ip);
$UserAgent = getenv ('HTTP_USER_AGENT');
$style = true; // Use default styles (true)
if (FALSE == empty($params['style']) && $params['style'] === "false" ) $style = false; // Except if "false" given in params
// Default styles (nur teilweise verwendet)
# $inputStyle = 'style="width:100%;border: 1px solid black; margin:0 0 1em 0;"'; // input boxes
# $taStyle = 'style="width:100%; border: 1px solid black; margin:0 0 1em 0;"'; // TextArea boxes (Original)
$taStyle = 'style="font-family: arial, helvetica, verdana, sans-serif;"'; // TextArea boxes
# $formStyle = 'style="width:45em; important; font-weight: bold;"'; // form (width:30em)
$errorsStyle = 'style="color: white; background-color: red; font-weight: bold; border: 3px solid black; margin: 1em;"'; // Errors box (div)
# $labelStyle = 'style="display:block;"';
# $buttonStyle = 'style="float:left; width:50%;"';
# $fieldsetStyle = 'style="padding:1em;"';
# $captchaStyle = 'style="margin-bottom:1em; text-align: center;"';
$errors=$name=$email=$subject=$message = '';
if (FALSE == empty($params['subject_get_var']) && FALSE == empty($_GET[$params['subject_get_var']]))
{
$subject = $_GET[$params['subject_get_var']];
}
?>
Scriptfehler: Das gewählte Template ist nicht vorhanden.';
break;
}
?>
What does this do?
Display's a contact form. This can be used to allow others to send an email message to the address specified.
How do I use it?
Just insert the tag into your template/page like: {contact_form email="yourname@yourdomain.com"}
If you would like to send an email to multiple adresses, seperate each address with a comma.
If you would like to send an email to Bcc, use optional parameter "bcc". (Example: bcc="admin@domain.com").
If you would like to use more HTML-Templates, set optional parameter "template". (Example: template="2").
What parameters does it take?
email - The email address that the message will be sent to.
(optional)style - true/false, use the predefined styles. Default is true.
(optional)subject_get_var - string, allows you to specify which _GET var to use as the default value for subject.
Example:
{contact_form email="yourname@yourdomain.com" subject_get_var="subject"}
Then call the page with the form on it like this: /index.php?page=contact&subject=test+subject
And the following will appear in the "Subject" box: "test subject"
(optional)captcha - true/false, use Captcha response test (Captcha module must be installed). Default is false.
(optional)bcc - If you want to send a Bcc-Mail.
(optional)template - If you want to use more HTML-Templates.
Author: Brett Batie <brett-cms@classicwebdevelopment.com> & Simon van der Linden <ifmy@geekbox.be>
Version: 1.5 (200709)
Change History:
l.2 : various improvements (errors handling, etc.)
1.3 : added subject_get_var parameter (by elijahlofgren)
1.4 : added captcha module support (by Dick Ittmann)
1.5 : Felder erweitert. Mailformular neu strukturiert (Formularteil als Template ausgelagert). Optional Bcc-Empfaenger hinzugefuegt.
Absender erhaelt immer eine Bestaetigungsmail. Template kann optional gewaehlt werden (Ohne Parameter wird Template 1 verwendet).
Parameter "mailsubject" muss eingegeben werden. (by Hans-M. Herbrand)