piFa Formular - Fehlermeldung und Mailversand

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

Ich habe ein Formular erstellt.
Nachdem ich es ausgefüllt habe, erhalte ich jedoch folgende Meldung im Fenster:
Screenshot_001_20140821.jpg
Screenshot_001_20140821.jpg (8.73 KiB) 8831 mal betrachtet
Zwei Dinge:
1) Die Fehlermeldung hat fehlende Platzhalter, obwohl diese in in der .po Datei (form_assistent.po) vorhanden ist:
Ab Zeile 404

Code: Alles auswählen

#: classes/class.pifa.form.php:545
msgid "MISSING_RECIPIENT_ADDRESS"
msgstr "Empfänger-Adresse fehlt"
Auch wenn ich es als m18n(); in das Modul mit reinsetze, und dann übersetze wird es nicht übersetzt.

2) Das weitaus wichtigere Problem:
Die Config des Formulars sieht so aus:
Screenshot_002_20140821.jpg
Screenshot_002_20140821.jpg (58.23 KiB) 8831 mal betrachtet
Die obige Fehlermeldung soll (soweit ich es verstanden habe) angeben, dass die Empfängeradresse fehlt.
So hab ich denn im Code mal nach der Stelle geschaut, welche die Exception wirft (class.pifa_form.php):

Code: Alles auswählen

    public function toMailRecipient(array $opt) {
print_r($opt);
        if (0 == strlen(trim($opt['from']))) {
            $msg = Pifa::i18n('MISSING_SENDER_ADDRESS');
            throw new PifaMailException($msg);
        }
        if (0 == strlen(trim($opt['fromName']))) {
            $msg = Pifa::i18n('MISSING_SENDER_NAME');
            throw new PifaMailException($msg);
        }
        if (0 == strlen(trim($opt['to']))) {
            $msg = Pifa::i18n('MISSING_RECIPIENT_ADDRESS');
            throw new PifaMailException($msg);
        }
        if (0 == strlen(trim($opt['subject']))) {
            $msg = Pifa::i18n('MISSING_SUBJECT');
            throw new PifaMailException($msg);
        }
        if (0 == strlen(trim($opt['body']))) {
            $msg = Pifa::i18n('MISSING_EMAIL_BODY');
            throw new PifaMailException($msg);
        }
und dort via print_r die Übergebenen Daten ausgegeben:
Screenshot_003_20140821.jpg
(39.36 KiB) Noch nie heruntergeladen
Auffällig ist, dass beim ersten Durchlauf das Feld "to" leer ist. Der Erste Durchlauf des Arrays bezieht sich übrigens auf den Bereich "Benutzer-Mail", obwohl diese ja mit der Einstellung für Vorlage "keine" deaktiviert sein sollte?!
Ist das nicht so gedacht würde ich in jedem Fall eine checkbox hinzufügen, wo man die beiden Mail-Varianten optional deaktivieren kann.
Der Code um die Benutzermail nicht zu versenden, wenn bei Vorlage "keine" gewählt wurde würde so aussehen :
Datei: class.pifa.mailed_form_processor.php ab Zeile 60 (hinzugefügt wurde die IF-Schachtelung des toMailRecipient-Aufrufs.

Code: Alles auswählen

if(!empty($this->getModule()->getSetting('pifaform_mail_client_template'))){
	            // send mail
	            $this->getForm()->toMailRecipient(array(
	                'from' => $this->getModule()->getSetting('pifaform_mail_client_from_email'),
	                'fromName' => $this->getModule()->getSetting('pifaform_mail_client_from_name'),
	                'to' => $values['email'],
	                'subject' => $subject,
	                'body' => $body,
	                'charSet' => 'UTF-8'
	            ));
			}

Hier fehlt also schon einmal die Abfrage, dass die Exception nur geworfen wird, wenn tatsächlich auch eine Benutzermail gesendet werden soll... womit wir direkt zur nächsten Frage kommen...
Wo wird die Reciepient-Mailadresse hergeholt?
Schaut man in die Datei class.pifa.mailed_form_processor.php in Zeile 61, wird deutlich, dass er $values['email'] abruft, also ein Textfeld mit dem Spaltennamen "email" erwartet.
Meiner Meinung nach sollte sowas "sauber" in der Fehlermeldung dokumentiert werden... und nicht lediglich Missing Reciepient ausgegeben werden - da suchen sich sonst selbst erfahrene Contenido-Programmierer nen Wolf :motz: .
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von Faar »

wegen all dem nehme ich auch für 4.9 noch das alte Formular, wo man mit PHP und HTML noch arbeiten kann.

Apropos: .po ist ein absolutes no-go bei Dingen, die man vor Ort übersetzen können muss.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

TIPP:
Damit der Mailversand von PIFA überhaupt funktioniert, muss zwingend ein SMTP-server unter Administration > System > System-Konfiguration eingetragen werden.
Grund: PiFa-Formular nutzt den Swift-Mailer, der die lokale und php eigene mail();-Funktion nicht unterstützt.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von Faar »

Ja eben, darum braucht es beim alten Formular auch noch die alte phpmailer-Klasse dazu: http://www.dfabig.de/de/download/conten ... enido.html
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von Oldperl »

rethus hat geschrieben:Grund: PiFa-Formular nutzt den Swift-Mailer, der die lokale und php eigene mail();-Funktion nicht unterstützt.
Was so nicht ganz korrekt ist, der Swift-Mailer kann alle Transportformen, nur im PIFA hat man sich rein auf SMTP mit dem in Contenido vermerkten Adressdaten festgelegt.
Würde man im Core des PIFA dahingehend eine Konfiguration ermöglichen könnte man auch mit allen Transportformen arbeiten.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von Faar »

Moin Ortwin,

könnte es dann sein, dass man das alte Formular mit etwas Anpassung auch auf den Swift-Mailer aufsetzt? :)

Unausgeschlafene Grüße,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von Oldperl »

Moin Frank,

aber sicherlich kann man das problemlos machen. Ist halt nur "a weng" Arbeit. :)

hellwache Grüße aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

Sitze gerade an einem neuen Kontaktformular für eine neue Webseite....
... ein echt nerviges Unterfangen. Hoffe dass der PiFa bald angepasst wird um auch die lokale Mailfunktion zu unterstützen. :roll:
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

Hier mal ein Lösungsansatz von mir:

In der Datei classes/class.Mailer.php die Funktion (constructTransport):

Code: Alles auswählen

public static function constructTransport($mailHost, $mailPort, $mailEncryption = NULL, $mailUser = NULL, $mailPass = NULL) {
        // try to use SMTP
        $transport = Swift_SmtpTransport::newInstance($mailHost, $mailPort, $mailEncryption);

        if (!empty($mailUser)) {
            $authHandler = new Swift_Transport_Esmtp_AuthHandler(array(
                new Swift_Transport_Esmtp_Auth_PlainAuthenticator(),
                new Swift_Transport_Esmtp_Auth_LoginAuthenticator(),
                new Swift_Transport_Esmtp_Auth_CramMd5Authenticator()
            ));
            $authHandler->setUsername($mailUser);
            if (!empty($mailPass)) {
                $authHandler->setPassword($mailPass);
            }
            $transport->setExtensionHandlers(array(
                $authHandler
            ));
        }

        // check if SMTP usage is possible
        try {
            $transport->start();
        } catch (Swift_TransportException $e) {
            // if SMTP is not possible, simply use PHP's mail() functionality
            $transport = Swift_MailTransport::newInstance();
        }

        return $transport;
    }
ersetzen gegen:

Code: Alles auswählen

public static function constructTransport($mailHost, $mailPort, $mailEncryption = NULL, $mailUser = NULL, $mailPass = NULL) {
        $mail_transport = getSystemProperty('system', 'mail_transport');
        switch(strtolower($mail_transport)){
            case "smtp":
                $transport = Swift_SmtpTransport::newInstance($mailHost, $mailPort, $mailEncryption);
            break;
            case "sendmail":
            case "php":
            case "mail":
            default:
                $transport = Swift_MailTransport::newInstance();
                break;
        }

        if (!empty($mailUser) && strtolower($mail_transport)=="smtp") {
            $authHandler = new Swift_Transport_Esmtp_AuthHandler(array(
                new Swift_Transport_Esmtp_Auth_PlainAuthenticator(),
                new Swift_Transport_Esmtp_Auth_LoginAuthenticator(),
                new Swift_Transport_Esmtp_Auth_CramMd5Authenticator()
            ));
            $authHandler->setUsername($mailUser);
            if (!empty($mailPass)) {
                $authHandler->setPassword($mailPass);
            }
            $transport->setExtensionHandlers(array(
                $authHandler
            ));
        }

        // check if choosen transport Type is possible
        try {
            $transport->start();
        } catch (Swift_TransportException $e) {
            cWarning("Error by initiate transport type of Swift-Mailer in class.mailer.php Line: 195");
        }

        return $transport;
    }
Erklärung
Im Backend von Contenido (Administration ⇒ System ⇒ Experteneinstellnugen) kann nun die folgende System-Variable erstellt werden:

Code: Alles auswählen

Typ: system
Name: mail_transport
Wert:
Der Wert ist ein einfacher String der eines der folgenden Werte haben kann:
  1. (leeres Feld..., also existierender Schlüssel ohne Eingabe)
  2. php
  3. mail
  4. sendmail
  5. smtp
In den ersten 4 Eingabefällen wird der mail()-Befehl von php genutzt, im letzen Fall die Daten, die unter Administration ⇒ System ⇒ Systemkonfiguration ⇒ Mailserver hinterlegt wurden.

@4fb: Bitte in den Core aufnehmen.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von frederic.schneider_4fb »

Lieber rethus,

vielen Dank für Dein Engagement und Deine Arbeit. Wir finden die Anregung gut und werden das in den Core von CONTENIDO übernehmen. In der nächsten Version noch nicht, da wir dort inzwischen ein Feature Freeze haben und nur noch Fehler beheben
Frederic Schneider
Entwickler bei der four for business AG
gorgo
Beiträge: 31
Registriert: Fr 4. Aug 2006, 15:39
Wohnort: Italy
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von gorgo »

Hey rethus,

10000 Dank, ich hatte es verzweifelt mit folgendem in der PifaFormCollection-Klasse versucht

Code: Alles auswählen

$mailer = new cMailer(Swift_MailTransport::newInstance());
Deine Lösung funktioniert super.
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

Freut mich, dass ich helfen konnte. Danke für das Feedback.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
urshappy
Beiträge: 1
Registriert: Mo 23. Mai 2016, 12:31
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von urshappy »

Hallo zusammen

Ich bin ziemlich neu hier... mehr muss ich dazu wohl nicht sagen...

Ich arbeite zum ersten Mal mit dem Kontaktformular in Contenido und komme damit nicht zurecht :? .

@rethus: Du hat in deinem ersten Post hier ein Screenshot eingestellt, welcher die Configuration deines Formulares zeigt. Punkt 2.
Wie kann ich dieses Konfigurationsfenster öffnen?

Version: 4.9.8
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von rethus »

urshappy hat geschrieben: Ich bin ziemlich neu hier... mehr muss ich dazu wohl nicht sagen...
Hi, und ein Herzliches Willkommen im Forum.
Ich muss zugeben, das PIFA in der Konfiguration auch nicht ganz so intuitiv ist.
Ich versuche es mal aufzuschlüsseln:
  • Zuerst gehst du ja in den Formular-Assistenten und legst ein Formular mit den gewünschten Feldern an. (Ich denke das hast du bereits getan)
  • Dann gehst du in die Module, und legst z.B. ein Modul an, das ein ensprechendes PIFA-Modul ausgibt. Hier kannst du direkt Platzhalter für deine Texte die übersetzt werden sollen einfügen.

    Beispiel:

    Code: Alles auswählen

    <?php
    if (cRegistry::isBackendEditMode()) {
        echo '<label class="content_type_label">' . mi18n("LABEL_FORM_LIEFERANTENPROFIL") . '</label>';
    }
    echo "<!-- profil_idcatart_langid -->
            <div id='Lieferantenprofil' class='profil_".$idcatart."_".$lang."'>CMS_PIFAFORM[200]</div>";
    mi18n("PIFA_MAIL_ERROR_SUFFIX");
    mi18n("PIFA_SYSTEM_MAIL");
    mi18n("PIFA_CLIENT_MAIL");
    mi18n("MISSING_RECIPIENT_ADDRESS");
    mi18n("REPLY_HEADLINE");
    mi18n("REPLY_TEXT");
    ?>
    
  • Unter Stlye ⇒ HTML im Backend sind dann die Templates (ich weiß gerade aus dem Stehgreif nicht warum dort und nicht im Modul, aber das hat glaub ich mit der späteren Templateauswahl im Artikel zu tun).
    So könnte ein Template aussehen:

    Code: Alles auswählen

    <div class="clear hr">
        <hr />
    </div>
    {$form}
    
  • Dann erstellst du eine Vorlage, die dein errstelltes Modul einbindet.
  • Gehe danach auf einen Artikel und weise Ihm die Vorlage zu.
  • In dem Artikel findest du nun einen blauen Button, über den du das Forumlar in dem Artikel konfigurieren kannst... es ist das Fenster, das ich oben als Screenshot hinzugefügt habe, wo du dann z.B. das erstellte Template wählen kannst, aber auch Mailadressen, Betreffzeilen etc. eingeben kannst.
Ich hoffe das gibt dir einen guten Start mit PIFA.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: piFa Formular - Fehlermeldung und Mailversand

Beitrag von frederic.schneider_4fb »

Guten Tag,

wir haben uns dem jetzt noch einmal angenommen:
Wir werden die Lösung doch nicht übernehmen. Das würde nämlich bedeuten, dass man zukünftig SMTP definieren und eine Systemeinstellung vornehmen müsste. Unabhängig davon war es problemlos möglich, ohne angegebenen SMTP-Server über mail() das PIFA-Formular auszufüllen, eine E-Mail zu versenden und zu empfangen.
Frederic Schneider
Entwickler bei der four for business AG
Antworten