Seite 2 von 6

Re: Formulargenerator

Verfasst: Do 19. Feb 2015, 18:29
von McHubi
Ja, Du bräuchtest die Eingabe im Formularfeld nur an das Array $recipients_in_array im Abschnitt "sending mail" anhängen. Das würde ich aber über die Konfiguration als optional "zuschaltbar" einbinden, damit das Modul mehrfach verwendbar bleibt. Wichtig: Der Variablenname zum Anhängen an das Array der Empfänger im Output muss mit dem in der Konfiguration übereinstimmen.

Re: Formulargenerator

Verfasst: Fr 4. Dez 2015, 12:26
von Freddy
Habe das gleiche Problem und komme nicht weiter. Gibt es mittlerweile schon eine Lösung??
egon2358 hat geschrieben: "keine Verbindung zum Mailserver - bitte nochmal versuchen
keine Verbindung zum Mailserver - bitte nochmal versuchen

Vielen Dank für Ihre Nachricht. Folgende Informationen wurden übermittelt."


Ich würde ja sagen es hängt an phpmailer jedoch bekomme ich das nicht zusammen.. wo genau kann ich das umstellen? :

# ggf. Umstellung von mail() auf smtp im Bereich ***** sending mail and displaying mailed data begin ***** der Modul-Ausgabe

Ich weiß momentan nicht weiter.

Re: Formulargenerator

Verfasst: Fr 4. Dez 2015, 19:53
von McHubi
Hast Du mal andere Kontaktformulare ausprobiert? Klappen die?
Artikelkonfiguration korrekt?
Bei Egon lags am Hosting und den entsprechenden Servereinstellungen -> Post vom 20.10.2014, Nachtrag

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 08:24
von Freddy
Meine Serverleute sagen mir folgendes:
Das Formularscript versucht jedenfalls erst gar nicht, die Mail über
PHP mail(), also direkt vom Webserver aus zu versenden.
Versuchen Sie ggf. einmal, die Konfiguration des Scripts bzw. Moduls
auf SMTP umzustellen.
Habe jetzt Contenido 4.9.9 installiert und versuche das Kontaktformular erneut zum laufen zu bekommen. Kann mir jemand weiterhelfen wie ich das Modul auf SMTP umstelle?

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 11:46
von Oldperl
Hallo Freddy,
Freddy hat geschrieben:Kann mir jemand weiterhelfen wie ich das Modul auf SMTP umstelle?
Dieses Modul kann (so wie es programmiert ist) momentan ausschliesslich per PHP-Mail-Funktion senden

Code: Alles auswählen

if (@mail($recipient,$mail_subject,"",$mail_header)) $sent = true;
      else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
    } 
Warum dieses bei deinem Hoster nicht geschieht müsste man an den entsprechenden Logs sehen können. Du kannst aber auch mal das @ vor dem mail-Befehl entfernen, dieses unterdrückt ja die Fehlerausgabe. Eventuell gibt es dann eine entsprechende Meldung.

Gruß aus Franken

Ortwin

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 12:15
von Freddy
Habe es jetzt mal ohne @ versucht aber es kommt wieder nur die Fehlermeldung: keine Verbindung zum Mailserver - bitte nochmal versuchen.
Im Errorlog steht folgendes:
[02-Mar-2016 12:08:50 Europe/Berlin] PHP Warning: mail(): Multiple or malformed newlines found in additional_header in /home/www/.../contenido/includes/frontend/include.front_content.php(750) : eval()'d code on line 302
Den Pfad habe ich mit ... gekürzt. Mit dem Errorlog kann ich aber nicht wirklich was anfangen.

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 12:37
von Oldperl
Hi,

deine "Serverleute" sind nicht zufällig von 1und1? Wie auch immer.
Tante G. hätte da recht schnell geholfen :arrow: https://www.google.de/search?client=ubu ... 8&oe=utf-8
Da hab ich dann gleich diesen Beitrag gefunden :arrow: http://giveback.danielmenzel.de/?p=121

Gruß aus Franken

Ortwin

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 14:00
von McHubi
EDIT: ANPASSUNG NICHT MEHR MIT AKTUELLER VERSION KOMPATIBEL!

Hallo Freddy,

ich habe mal Anpassungen vorgenommen. Zwar auf die Schnelle, aber es läuft. Für einen "runden" Neuaufbau des Bereichs /*########## sending mail and displaying mailed data begin ##########*/ fehlt mir momentan die Zeit. Die Ergänzungen betreffen ausschließlich den Output des Moduls:

1. Ergänze am Anfang des Outputs die Variable $method, die if-Abfrage und passe die Werte entsprechend an:

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     form_generator_sd
* Author(s)   :     Seamless-Design Markus Hübner
* Copyright   :     Markus Hübner
* Created     :     08/2014
* modified    :     03/2016: added smtp-support
************************************************/

$method="smtp"; // smtp or empty

if($method=="smtp")
  {
  $host = 'xxx.xxx.xxx.xxx';
  $username = 'xxx';
  $password = 'xxx';
  $mail_header_smtp_from = "adresse@domain.de";
  require_once "mail.php";
  require_once "Mail/mime.php";
  }

2. Ersetze ziemlich am Ende des Outputs

Code: Alles auswählen

      // Ende:
      $mail_header .= "\n--".$boundary."--";
     }    
    }
  foreach($recipients_in_array as $recipient)
    {
    if (@mail($recipient,$mail_subject,"",$mail_header)) $sent = true;
      else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
    }
/********** sending mail end **********/
durch

Code: Alles auswählen

      // Ende:
      $mail_header .= "\n--".$boundary."--";
      
      if($method=="smtp") // different header is used, so attachment has to be placed within $mail_body
        {
        $mail_body = "--".$boundary."\nContent-Type: text/html; charset=iso-8859-1\r\n\n\n".$mail_body;
        $mail_body .= "\n--".$boundary;
        $mail_body .= "\nContent-Type: ".$_FILES['attachment']['type']."; name=\"".utf8_decode($_FILES['attachment']['name'])."\"";
        $mail_body .= "\nContent-Transfer-Encoding: base64";
        $mail_body .= "\nContent-Disposition: attachment; filename=\"".utf8_decode($_FILES['attachment']['name'])."\"";
        $mail_body .= "\n\n".$file_content;
        $attachment="true";
        }
     }    
    }
  foreach($recipients_in_array as $recipient)
    {
    if($method=="smtp")
      {
      $smtp = Mail::factory('smtp', array('host'=>$host, 'auth'=>true, 'username'=>$username, 'password'=>$password));  
        $headers = array(
        'From' => $mail_header_smtp_from,
        'Subject' => $mail_subject
        );
      if($attachment=="true")
        {
        $headers['Content-Type']="multipart/mixed; boundary=\"".$boundary."\"\n";
         }
         else
           {
           $headers['Content-Type']="text/html; charset=iso-8859-1\r\n";   
           }
      $mail = $smtp -> send($recipient, $headers,$mail_body);
      if(PEAR::isError($mail)) echo $mail->getMessage();
        else echo ''; 
      }
      else
        {
        if (@mail($recipient,$mail_subject,"",$mail_header)) $sent = true;
          else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
        }
    }
/********** sending mail end **********/
Wichtig: Normalerweise passe ich im Eröffnungspost bei Korrekturen und Ergänzungen die Quelltexte an. Da diese Ergänzung zwar funktioniert aber "quick'n'dirty" ist, ist sie NICHT im Anfangsposting enthalten.

VG,

Markus

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 15:03
von Freddy
Vielen Dank für Eure Mühe. Der Vorschlag von McHubi läuft leider nicht bei mir aber der Tip von Tante G. habe ich versucht anzuwenden und siehe da es funktioniert. Bei Email mit Anhang kommt eine Email mit ewig langen Code an aber zum Glück brauche ich kein Formular mit Anhang. Habe nur noch ein Umlautproblem. Ich bin nicht beim Provider 1und1. Habe mal den Abschnitt wo ich Veränderungen gemacht habe hier gepostet. Vielleicht sieht jemand noch ein Fehler drin den man verbessern kann und vielleicht auch wie ich das Umlautprobelm gelöst bekomme.

Code: Alles auswählen

/********** sending mail begin **********/

$eol = PHP_EOL;
if($form_submitted!="" AND $no_errors=="true")
  {
  $ip = htmlspecialchars(strip_tags($_SERVER["REMOTE_ADDR"]));
  if($gender=="female") $gender_mail=mi18n("output email female");
    else $gender_mail=mi18n("output email male");
  //building array with recipients
  $recipients = "CMS_VALUE[100]";
  $array_recipients=array_filter(explode("//",$recipients));
  $recipients_in_array=explode("//",$recipients);
  //formatting subject of email
  $mail_subject="CMS_VALUE[200]";
  $mail_subject.=' - '.$name;
  // mail_body ist build within checking for errors section
  $mail_header = "From: ".$name." <".$email.">".$eol;
  $mail_header .= "X-Sender-IP: ".$ip."".$eol;
  if($filetype=="")
  {
  $mail_header .= "Content-type: text/html; charset=iso-8859-1".$eol;
  $mail_header .= $mail_body;
  $filename="";
  }
  else
    {
	$filename=$_FILES['attachment']['name'];
	if (isset($_FILES['attachment']['name']) && trim($_FILES['attachment']['name']) != "")
      {
      // Datei einlesen und codieren:
      $file_content = fread(fopen($_FILES['attachment']['tmp_name'],"r"),filesize($_FILES['attachment']['tmp_name']));
      $file_content = chunk_split(base64_encode($file_content),76,"");
      // Boundary festlegen:
      $boundary = md5(uniqid(rand()));
      // Mail-Header:
		  $mail_header .= "MIME-Version: 1.0";
      $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"";
      $mail_header .= "This is a multi-part message in MIME format.".$eol;
      // Mail-Text:
      $mail_header .= "--".$boundary.$eol;
      $mail_header .= "Content-Type: text/html; charset=iso-8859-1".$eol;
      $mail_header .= $mail_body.$eol;
      // Attachment:
      $mail_header .= $boundary;
      $mail_header .= "Content-Type: ".$_FILES['attachment']['type']."; name=\"".$_FILES['attachment']['name']."\"".$eol;
      $mail_header .= "Content-Transfer-Encoding: base64".$eol;
      $mail_header .= "Content-Disposition: attachment; filename=\"".$_FILES['attachment']['name']."\"".$eol;
      $mail_header .= $file_content.$eol;
      // Ende:
      $mail_header .= "--".$boundary."--";
	  }	  
    }
  foreach($recipients_in_array as $recipient)
    {
    if (@mail($recipient,$mail_subject,"",$mail_header)) $sent = true;
      else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
    }
/********** sending mail end **********/

Re: Formulargenerator

Verfasst: Mi 2. Mär 2016, 18:27
von McHubi
Bei Email mit Anhang kommt eine Email mit ewig langen Code an
Dann wird die Mail nicht als multipart verschickt. Ein paar "Output-Schnipsel" auf dem Weg dahin:

Prüfung ob ein Dateianhang übermittelt wurde und welchen Typs er ist:

Code: Alles auswählen

if($field[1]=="type_file")
    {
    $array_filetype=explode('/',$_FILES[$field[0]]['type']);
    $filetype=strtolower($array_filetype[1]);
Im Bereich /*########## sending mail and displaying mailed data begin ##########*/ wird dann der passende Header gesetzt

Code: Alles auswählen

if($filetype=="")
  {
  $mail_header .= "Content-type: text/html; charset=iso-8859-1\r\n";
  $mail_header .= "\n\n".$mail_body;
  $filename="";
  }
-> Mail ohne Anhang

Ist der Filetype gefüllt, wurde eine Datei angehängt. Der Content-Type muss anders lauten:

Code: Alles auswählen

  else
    {
   $filename=$_FILES['attachment']['name'];
   if (isset($_FILES['attachment']['name']) && trim($_FILES['attachment']['name']) != "")
      {
      // Datei einlesen und codieren:
      $file_content = fread(fopen($_FILES['attachment']['tmp_name'],"r"),filesize($_FILES['attachment']['tmp_name']));
      $file_content = chunk_split(base64_encode($file_content),76,"\n");
      // Boundary festlegen:
      $boundary = md5(uniqid(rand()));
      // Mail-Header:
      $mail_header .= "MIME-Version: 1.0\n";
      $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
      $mail_header .= "This is a multi-part message in MIME format.\n";
      // Mail-Text:
      $mail_header .= "--".$boundary;
      $mail_header .= "\nContent-Type: text/html; charset=iso-8859-1\r\n";
      $mail_header .= "\n\n".$mail_body;
      // Attachment:
      $mail_header .= "\n--".$boundary;
      $mail_header .= "\nContent-Type: ".$_FILES['attachment']['type']."; name=\"".$_FILES['attachment']['name']."\"";
      $mail_header .= "\nContent-Transfer-Encoding: base64";
      $mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['attachment']['name']."\"";
      $mail_header .= "\n\n".$file_content;
      // Ende:
      $mail_header .= "\n--".$boundary."--";
Da der Code in dieser Form beim Versenden per

Code: Alles auswählen

if (@mail($recipient,$mail_subject,"",$mail_header)) $sent = true;
          else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
zumindest bei mir in mehreren Installation reibungslos läuft, schau bitte mal nach, ob Du hier in dem Bereich ggf. was angepasst hast. Evtl. lässt Dein Provider keine Dateianhänge zu?

Re: Formulargenerator

Verfasst: Do 3. Mär 2016, 12:00
von McHubi
Da ich mir das Modul ohnehin gerade angesehen habe, hab ich mal eben noch die Möglichkeit hinzugefügt, per "Trenner" (type_separator) Zwischenüberschriften einzufügen um Formulare segmentieren zu können. Die Quelltexte im Eröffnungspost sind angepasst.

Re: Formulargenerator

Verfasst: Mi 27. Apr 2016, 13:53
von Freddy
Hallo Markus,
benutze das Modul auf eine Webseite mit zwei Sprachen. Wenn ich in einer Sprache das Modul konfiguriere wird es automatisch für die andere Übernommen. Kann man es irgendwie ausschalten.

Re: Formulargenerator

Verfasst: Do 28. Apr 2016, 08:31
von McHubi
Hallo Freddy,

muss ich mir näher anschauen. Kann Dir allerdings nicht sagen, wann ich das schaffe weil grad viel um die Ohren...
Meld mich aber hier nochmal dazu.

Bis dahin,


Markus

Re: Formulargenerator

Verfasst: Fr 29. Apr 2016, 07:50
von Freddy
Ich glaube mittlerweile, dass es nicht ein Problem des Moduls sondern vom Contenido-System ist. Schlage mich mit ähnlichen Problemen in Download oder Artikelliste rum. Dort werden auch die Konfigurationswerte von der anderen Sprache teilweise übernohmen.

Re: Formulargenerator

Verfasst: Fr 29. Apr 2016, 09:11
von Oldperl
Servus,
Freddy hat geschrieben:Ich glaube mittlerweile, dass es nicht ein Problem des Moduls sondern vom Contenido-System ist.
Ein ganz klares JEIN.
Contenido bietet seit jeher die Möglichkeiten Konfigurationen in Modulen Mandanten- und Sprach-spezifisch abzulegen. Jedoch müssen das die Module auch entsprechend nutzen. Hier kommt es dann doch sehr darauf an, wie die "interne" Verarbeitung von Konfigurationen umgesetzt wird.
Da es mehrere Möglichkeiten in Modulen dafür gibt (Input, XML, (Artikel-)Properties, etc.) kann man natürlich schwerlich eine allgemein gültige Aussage dazu machen. Zumindest im Modul-Input-Bereich werden direkt beim Artikel die Konfigurationswerte zu Sprache und/oder Mandant zugeordnet. Auch bei den Content-Types sollte das so sein. Sofern die globalen Variablen für 'idlang' und 'idclient' vorhanden und entsprechend befüllt sind, werden diese entweder direkt oder per cRegistry ausgewertet und verwendet.

Falls Jemand Zeit, Lust und Laune hat könnte sie/er ja einmal alle Möglichkeiten mit den entsprechenden Bereichen listen und hier einstellen. Dann könnte Jeder dort mal schauen ob die Kriterien erfüllt sind, oder ob es noch Bugs oder Nachbesserungspotential gibt.

Gruß aus Franken

Ortwin