TYPO3: Powermail – Verschiedene Empfänger im Formular auswählen
Der Besucher soll die Möglichkeit bekommen, über ein Auswahlfeld ein Thema für seine Anfrage zu wählen. In Abhängigkeit seiner Auswahl soll das Formular an verschiedene Empfänger gesendet werden. Das sollte eigentlich keine große Schwierigkeit darstellen. Allerdings sollen die E-mail Adressen nicht im Klartext im Value des Auswahlfeldes stehen.
Hierzu bietet powermail die Möglichkeit, Daten aus der Datenbank zu verwenden. Z.B. der Frontend-Benutzer (Tabelle:fe_users)
1. FE User mit E-Mail Adresse anlegen
In diesem Beispiel werden 3 Benutzer angelegt
2. Neues Auswahlfeld im Formular anlegen
Ausgangssituation ist ein bereits vorhandenes Formular, das um die Auswahl eines Themas erweitert werden soll. Es wird ein neues Feld vom Typ: Auswahlfeld angelegt und an die erste Position geschoben. Im Bereich Optionen werden die Bezeichnungen eingetragen und danach, getrennt durch ein Strich die uid des Frontend-Benutzers.
3. TypoScript
Damit beim Absenden des Formulares die uid des Frontend-Benutzers durch dessen E-mail ersetzt wird, muß folgendes TypoScript im Setup des TS-Templates geschrieben werden.
plugin.tx_powermail_pi1.email.recipient_mail {
email_query = TEXT
email_query.value = SELECT email FROM fe_users WHERE uid = ###UID11### AND disable = 0 AND deleted = 0
}
###UID11### ist hier die ID des Powermail Formularfeldes (siehe Bild 2)
4. Stolperfalle & Tipp
Hier noch ein kleiner Hinweis auf eine Stolperfalle, die einen zur Verzweiflung treiben kann. Wie schon gesagt, wurde unser Formular erweitert. Deshalb steht im Reiter „Empfänger“ natürlich schon eine Adresse drin. Sie überschreibt beim Absenden des Formulares den Inhalt des Auswahlfeldes.
Also, leermachen!
Hilfreich ist zu Testzwecken auch folgendes Script.
Es zeigt alle Formulardaten beim Absenden an.
plugin.tx_powermail_pi1.debug.output=all
15 Comments to TYPO3: Powermail – Verschiedene Empfänger im Formular auswählen
Vorsicht: Ich sehe eine Sicherheitslücke, da es hiermit möglich ist an jeden beliebigen angemeldeten User eine E-Mail zu versenden.
Hallo Andy,
ich sehe das Risiko eher als gering an, da es nur 3 Backend-User gibt.
Diese werden ausschließlich für die Formularadressierung verwendet.
Man könnte evtl. eine Mail an die falsche Abteilung senden. Das ist verschmerzbar,
das diese dann sicherlich intern weitergeleitet werden.
Ich würde mich freuen, wenn Du deine Bedenken etwas genauer beschreiben könntest.
LG Andreas
Wird denn der Wert des Feldes ###UID11### z.B. per intval validiert? Sonst könnte da ja von Client-Seite statt z.B. Wert 2 ein SQL Statement kommen => SQL-Injection.
Korrigieren mit bitte, wenn ich hier falsch liegen sollte, oder was übersehen habe.
Handelt es sich hier bei Powermail um den 1er oder 2er Zweig?
Trotzdem danke für die Beschreibung.
Gruß,
Michael
Hallo Michael,
Es handelt sich hierbei um den 1er Zweig (1.6.9).
Ich habe das so umgesetzt, wie es in der Dokumentation steht.
Da powermail die gesendeten Mail auch in einer Datenbank speichert, gehe ich davon aus, das ALLE Formularwerte vor der Speicherung validiert, und somit auch auf SQL Statements geprüft werden.
Dennoch hat mich dein Einwand nachdenklich gemacht.
Evtl. ist da jemand der uns weitere Infos liefern kann.
LG Andreas
Hi,
habe den code so eingebunden wie es in der beschreibung steht und ich erhalte folgende Meldung:
Address in mailbox given [] does not comply with RFC 2822, 3.6.2.
Wenn ich die Meldung ausschalte erscheint zwar die Dankeseite, die Email wird im Ordner gespeichert aber es wird keine Email an die gewählte Email Adresse gesendet.
Hast mir vielleicht einen Tipp was ich noch prüfen sollte.
danke und gruss
Hallo Immo,
diese Fehlermeldung hat meiner Meinung nach weniger was mit powermail zu tun. Meist verwenden Extensions den TYPO3 Mailer, welcher eine sehr regide Mailvalidierung vornimmt. Das Deaktivieren der Fehlermeldung löst das Problem nicht. Stellt sich also die Frage, ob überhaupt korrekte Mailadressen übergeben werden?
1. Taucht das Problem auch bei einem Standardmailformular auf?
2. Hast Du den Frontend- Usern eine gültige E-Mailadresse gegeben?
3. Siehe 4. Steht dort bei Dir auch wirklich nichts drin? Auch kein Leerzeichen?
Bitte mal überprüfen.
LG Andreas
Hi Andreas,
danke für die schnelle Antwort.
1. nein es taucht nicht beim Standardartmailformular
2. ja die haben alle eine gültige Email Adresse.
3. das feld ist leer und in den klammern steht nichts drin.
folgende ausgabe erhalte ich wenn ich den debug modus aktiviere
powermail: Values from session
uid3707 22
uid3708 niemand
powermail: Email values (recipient_mail)
receiver SYSTEM NOTE: No receiver email address
cc receiver SYSTEM NOTE: No cc addresses
sender noreply@domain.ch
sendername powermail
reply email
reply name
return path noreply@domain.ch
charset utf-8
attachment SYSTEM NOTE: No attachments
subject test
Hallo Immo,
bei Dir steht im Debugmode unter receiver keine Empfängeradresse drin.
Wenn Du für jeden Frontend-User ein Mailadresse hinterlegt hast, wird diese bei Auswahl im Formular offensichtlich nicht übergeben.
Das deutet darauf hin, das dein SQL-Statement in email.query.value (siehe 3.) keine E-Mailadresse zurück gibt.
Bitte mal das Statement prüfen.
Fehlerquellen:
1. Das Datenbankfeld lautet : email
2. Datenbanktabelle ist fe_users (hier wird gerne das s am Ende vergessen)
3. Wird das richtige Formularfeld angesprochen ###UIDxx###?
4. Stehen beim Auswahlfeld unter Optionen die richtigen FE-User IDs hinter dem „|“ ?
LG Andreas
hi,
hab das mehrmals geprüft und es passt!
Darf ich dich etwas andere fragen weil ich noch einen andere code gefundne habe.
Wo finde ich die ID von # Seite mit FE_Users.
Oder ist das gar keine Id 😀
dank dir für deine hilfe
table = fe_users
select {
# Seite mit FE_Users
pidInList = 20
andWhere {
okey jetzt bin ich verwirrend. es lag an der db. und zwar gibt es die datenbank fs_useres aber dort wird keiner user gespeichert. sondern in be_users. normal?
würde das bsp auch mt powermail 2 funktionieren?
Hallo Immo,
be_users enthält die Backend User für das Typo3 Login.
fe_users enthält die sog. Frontend User (Websitebenutzer).
Diese können sich in einem passwortgeschützten
Bereich in der Website einloggen. Sie werden folgendermaßen
angelegt.
1.) Seite vom Typ „Ordner“ anlegen Name: z.B. FE_User
2.) Dann links: Menü „Liste“ auswählen
3.) Rechts oben: Neuen Datensatz erstellen (Symbol grünes Plus)
4.) Rechts: nach unten scrollen, unter Systemdatensätze dann Websitebenutzer auswählen.
5.) Benutzername, Passwort und E-Mailadresse unter „Persönliche Daten“ eingeben
Die so angelegten Benutzer werden in fe_users gespeichert.
Nun sollte die Datenbankabfrage auch Ergebnisse liefern.
LG Andreas
Danke für diesen Artikel! – Bei den Bestätigungs- und Empfangsmails gibt es nun aber das Problem, dass die ID statt des Namens. Für die Benutzung mit fe_user gibt es hier eine Lösung: http://twitcode.org/show/199/dynamic-recipient-powermail
Leider aber nichts zu tt_address…
Hallo aus Nürnberg,
ich hätte mal eine Frage zu einer Erweiterung des Scripts.
Aktuell sieht die Ausgabe der Email ja nicht toll aus mit
Thema = 1
hier sollte ja eigentlich
Thema = Allgemein
stehen. Wie könnte man das Lösen?
Gibt es eine Möglichkeit den Value nach der Abfrage mit den Inhalt des Tags zu füllen?
Oder wenn man z.B. Allgemein | Allgemein/1 schreibt
Gibt es eine Möglichkeit den String von ###UID11### am / zu Spliten um mit den Linke zu ersätzen und mit den Rechten die Datenbankabfrage zu machen?
Gruss Jürgen
Hallo Jürgen,
Die Ausgabe der Mail Daten im Empfängermail habe ich über ###POWERMAIL_ALL### im Reiter Empfänger gesetzt.
Du müsstest Dir das Ganze von Hand mit den Markern selbst aufbauen (siehe Doku).
Da die Werte zwischen den Option-Tags nicht mit übergeben werden, muss man sie wohl selbst mit TypoScript setzen. Man könnte mit einer Case-Anweisung
die Value-Werte durch eigene Texte ersetzen.
Dies hier könnte dabei hilfreich sein:
LG Andreas
Hi
kann mir irgend jemand sagen, wo hier der Fehler noch liegen kann?
Oder ob das Konstrukt mit TYPO3 4.5.35 noch läuft?
TYPO3 4.5.35
powermail 1.6.11
###UID11### ist entsprechend meinen Feldern angepasst
E-Mail Adressen sind valide
Email of recipient Field ist leer.
cache ist gelöscht
Fehler Meldung: Address in mailbox given [] does not comply with RFC 2822, 3.6.2.
Debug:
powermail: Email values (recipient_mail)
receiver SYSTEM NOTE: No receiver email address
cc receiver SYSTEM NOTE: No cc addresses
Vielen Dank !
Joachim
Schreib einen Kommentar
Dieser BLOG
Werbung
TYPO3 Projekte
- ALSA GmbH
- BKK Technoform
- Connors SL
- DAV Fulda
- Enders Fenster und Türen
- Fahrradhandlung A.Riebold
- Fitnessstudio Medi Sport Gym, Bad Hersfeld
- Freiw. Feuerwehr Bad Hersfeld
- GPS Mountainbiker.de
- Günther Tank GmbH
- Hochrhoen-touren.de
- Impuls Ergotherapie Fortbildung
- Krieg & Fischer Ingenieure GmbH
- Landbäckerei Brack
- NLP Weiterbildung, Elke Post
- Physioprofil Bad Hersfeld
- Praxis am Salzberg
- RELAX Group
- RENSCH-HAUS GMBH
- Rhönschule Gersfeld
- Rohrreinigung Fulda
- V.W Günther Mineralölhandelsgesellschaft mbH
- Vogelsbergschule Lauterbach
- Wolfgang Schaub GmbH
- Zahnatelier Feinschliff
19. November 2012