Page 1 of 1

Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(

Posted: Mon Mar 17, 2008 9:59 am
by m266
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)
       


Re: Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(

Posted: Mon Mar 17, 2008 7:22 pm
by cyberman
m266 wrote: //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";
Hmm, scheint trotz allem ein Kodierungsproblem zu sein, hab da was auf SelfHTML gefunden, evtl. hilft das weiter

Code: Select all

		//Mail headers
		$extra = "From: $name <$email>\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";
                $extra .= "Content-Transfer-Encoding: 8bit\r\n";
Oder das

Code: Select all

		//Mail headers
		$extra = "From: $name <$email>\r\n";
                $extra .= "MIME-Version: 1.0\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";

Re: Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(

Posted: Sun Mar 23, 2008 6:58 pm
by m266
Leider geht es mit den beiden genannten Hinweisen auch nicht.
Der Fehler mit den Umlauten tritt auch auf, wenn ich den Original-Tag verwende.

Weitere Info:
Es wurde eine neue Site mit Version 1.2.3 aufgesetzt und alle Charset-Einstellungen belassen (utf-8).

Meta-Tag:



Der Fehler liegt also nicht an meinem umgebauten Formmailer-Tag.

Kann das bitte jemand nachprüfen (nach Möglichkeit auch mit meinem Formmailer)?

Vielen Dank.


m266

Re: Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(

Posted: Mon Mar 24, 2008 12:10 am
by NaN
Es könnte evtl. auch am Mailserver liegen.
Habe das contactforn-tag auch schonmal angepasst.
Habe ich die Mail im Web-Mailer geöffnet, waren die Umlaute verstümmelt.
Bei Outlook sah es wieder normal aus.
Hab dann den Posteingangsserver mal auf IMAP gestellt, und dann war es bei beiden okay.

Re: Der (fast) perfekte Formmailer: Noch Umlautprobleme :-(

Posted: Mon Mar 24, 2008 7:34 am
by m266
Da die Mails an verschiedene Empfänger gehen, würde eine Umstellung auf IMAP nichts nutzen. Das Problem muss schon serverseitig gelöst werden. Ich versuche nun mal charset zu ändern, wobei ich ungern die Grundkonfiguration anpasse.