Datenschutz Impressum

NOF-Schule | Forum

zur Schule NOF-NetObjects-Tutorials von Tommy Herrmann


PHP-Script-Fehler: name nur ohne Leerzeichen!
#1
Hallo Leute,

ich habe mich mal mit einem neuen Projekt an Mobirise gewagt und u.a. ein Kontaktformular erstellt.
Da ich mit der Optik der MBR-eigenen Forms-Service nicht zufrieden war, habe ich von Tommy das Mailscript 2017-09-23-Mobirise_Mailscript heruntergeladen, was mich aber aus folgenden Gründen auch nicht wirklich glücklich gemacht hat...
  • Als Absender erscheint immer das Master-Postfach, was die Antwortfunktion aushebelt.
  • Das Paket enthält 66 Dateien, was IMHO im Grunde 65 Dateien zuviel sind.
  • Alle Daten sind allesamt im Body

Daher habe ich mich  an einem eigenen kurzen Script versucht, was auch soweit funktioniert..., aber:

Ich habe endweder das Problem, daß der Name kein Leerzeichen enthalten darf, oder alternativ das Problem, daß der Absender nicht als "Name <eMail>" erscheint, wodurch der Name gänzlich fehlt (habe ich unschön & vorläufig umgangen...

Ich konnte den Fehler auf das Ende einer Zeile eingrenzen:
PHP-Code:
 $sent mail($to$subject$message"From: $from\nContent-Type: text/plain; charset=UTF-8\nX-Mailer: PHP/".phpversion(), "-f $email"); 
Hier fehlt der Name.

PHP-Code:
 $sent mail($to$subject$message"From: $from\nContent-Type: text/plain; charset=UTF-8\nX-Mailer: PHP/".phpversion(), "-f $from"); 
Hier darf der Name kein Leerzeichen enthalten.

Hier das gesamte Script (zum besseren Verständnis & für etwaige Codeverbesserungs-Tips):
PHP-Code:
<?php

//Fixdaten zur Website
 
 $formularSeite "kontakt.php"// Seite auf dem sich das Mailformular befindet
 
 $anker "form1-y"// Anker zu dem Mailformular ("Section id")

// Fixdaten zur eMail
 
 $toname "John Doe"// Name des Empfängers
 
 $toemail "john@example.com"// eMail des Empfängers
 
 $subject "Generierte Nachricht vom eMail-System der Homepage"// Betreff-Zeile der eMails
 
 $wordwrap "Ja"// "Ja/Nein" - Schaltet Zeilenumbruch nach x Zeichen ein
 
 $letters "72"// Zeichenanzahl nachdem der Zeilenumbruch erfolgen soll

/**********************************************/
/*                                            */
/*     Ab hier bitte nichts mehr ändern !     */
/*                                            */
/**********************************************/


// Wurden POST-Daten gesendet?
if ($_SERVER["REQUEST_METHOD"] == "POST") {

 
  $name $_POST["name"];
 
  $email $_POST["email"];
 
  $phone $_POST["phone"];
 
  $message $_POST["message"];

 
 // Leerzeichen am Anfang und Ende kürzen
 
 list($name$email$message) = array(trim($name), trim($email), trim($message)); 
 
 // Nur bestimmte Zeichen fuer eMail Adresse zulassen
 
 $email preg_replace"/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im"""$email);
 
 // Befehle fuer weitere eMail Empfaenger entfernen
 
 $email preg_replace"/(content-type:|bcc:|cc:|to:|from:)/im"""$email);
 
 $message preg_replace"/(content-type:|bcc:|cc:|to:|from:)/im"""$message );
 
 //
 
 if (preg_match("/MIME-Version: /"$name.$email.$message)) die('Kein Spam erlaubt.');
 
 
 $to $toname .'<'.$toemail.'>';
 
 $from $name .'<'$email .'>';

// Zusätzliche body-Angabe: Telefonnummer
 
 $message .= "\n\n----\nDer Name des Absenders ist: " .$name;
 
 if ($phone != "") {
 
 $message .= "\n\nZur Kontaktaufnahme wurde die Telefonnummer " .$phone" angegeben.";
 
 }

 
   // Zeilenkürzung auf x Zeichen
if ($wordwrap == "Ja") {
 
 $message wordwrap(implode("\r\n"preg_split("/\r?\n/"trim($message))),$letters);
 
 }
 
 
//  $sent = mail($to, $subject, $message, "From: $from\nContent-Type: text/plain; charset=UTF-8\nX-Mailer: PHP/".phpversion(), "-f $from");
 
 $sent mail($to$subject$message"From: $from\nContent-Type: text/plain; charset=UTF-8\nX-Mailer: PHP/".phpversion(), "-f $email");


 
 if ($sent) {
 
   header("Location: " $formularSeite '?status=OK#' $anker);
 
 } else {
 
 header("Location: " $formularSeite '?status=KO#' $anker);
 
 }
 
 }
?>

In hoffnungsvoller  Erwartung eurer Hilfe
LG RF
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#2
Genau dieses Problem hatte ich auch einmal als ich den Kontaktformular Generator entwickelt habe.

Das Problem sind die Leerzeichen (und Umlaute) im Namen.
Meine damalige Lösung war, den Namen mit  mb_encode_mimeheader() zu kodieren.

Vielleicht hilft dir folgender Code weiter:
PHP-Code:
 // E-Mail versenden
 
 mb_internal_encoding("UTF-8");
 
 $Betreff mb_encode_mimeheader($betreff"UTF-8""Q");
 
 $Kopfzeile "MIME-Version: 1.0;\nFrom: " mb_encode_mimeheader($name"UTF-8""Q") .
 
  "<" $email ">" "\nContent-Type: text/plain; Charset=UTF-8;\n";

 
 if (mail($Mailto$Betreff$Text$Kopfzeile)) {
... 

Außerdem sollte auch der Betreff (in deinem Script $subject) mit mb_encode_mimeheader() behandelt werden.
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#3
Hallo Werner,

ich habe es so umgesetzt:
PHP-Code:
...
 
   // Zeilenkürzung auf x Zeichen
if ($wordwrap == "Ja") {
 
 $message wordwrap(implode("\r\n"preg_split("/\r?\n/"trim($message))),$letters);
 
 }

// E-Mail versenden
 
 mb_internal_encoding("UTF-8");
 
 $Betreff mb_encode_mimeheader($subject"UTF-8""Q");
 
 $Kopfzeile "MIME-Version: 1.0;\nFrom: " mb_encode_mimeheader($name"UTF-8""Q") . "<" $email ">" "\nContent-Type: text/plain; Charset=UTF-8;\n";

if (
mail($to$Betreff$message$Kopfzeile)) {
... 
... und bekomme die eMail auch zugestellt, allerdings
  • ist der Absendername weiterhin nicht im Header zu erkennen (geschw. im Clientren als Absender)
  • ist der Absender wieder meine eigene Postmaster-Adresse, wodurch der eigentliche Absender nun völlig verschwunden ist...
Wer etwas erreichen will sucht Wege, wer etwas verhindern will sucht Gründe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
#4
Keine Ahnung wo der Fehler liegt.
Auf meiner Website, zum versenden der E-Mails,  verwende ich grundsätzlich den PHPMailer. Da weiß ich sicher das die Mails beim Kunden auch ankommen und nicht irgendwo gefiltert werden (Provider, Spamordner, ...).

Auch habe ich keine Probleme damit, das der Benutzer Leerzeichen oder Umlaute in seinem Namen oder in der Nachricht verwendet, diese werden automatisch in die Zeichenkodierung utf-8 konvertiert.

Der PHPMailer macht mehr als nur die E-Mail zu versenden, er kümmert sich auch um die korrekte Formatierung nach den RFC-Standards. RFCs (Request For Comments) diese beschreiben den Aufbau einer E-Mail und die Verbindung zum Mail-Server.

Profis benutzen den PHPMailer und Experten verwenden mail() roh! > bist du ein Experte?

Mobirise bindet doch auch die Bibliotheken jQuery und Bootstrap etc. ein, warum nicht den PHPMailer wenn es um den Kontakt zum Kunden geht?
Gruß Werner
werner-zenk.de - Tipps und Lösungen rund um HTML, CSS, JavaScript und PHP
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  PHP-Script Fehler: Parse error Martin73 8 412 21.06.2018, 11:55
Letzter Beitrag: Martin73



Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
nach oben An den Anfang der Seite scrollen
NetObjects Fusion Infos, Downloads und Updates Diese Website wird durch Bot-Trap vor Spam geschützt!