Zurück zur Startseite

24. Mai 2012

TYPO3: Powermail – Verschiedene Empfänger im Formular auswählen

powermail_receiver_00Der 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

powermail_receiver_01

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.

powermail_receiver_02

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!

powermail_receiver_03

Hilfreich ist zu Testzwecken auch folgendes Script.
Es zeigt alle Formulardaten beim Absenden an.

plugin.tx_powermail_pi1.debug.output=all
Autor: Andreas Kempf, Donnerstag, 24.05.2012 Allgemein Extensionentwicklung TYPO3

15 Comments  Kontakt

15 Comments to TYPO3: Powermail – Verschiedene Empfänger im Formular auswählen

Andy
19. November 2012

Vorsicht: Ich sehe eine Sicherheitslücke, da es hiermit möglich ist an jeden beliebigen angemeldeten User eine E-Mail zu versenden.

admin
21. November 2012

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

Michael
27. November 2012

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

admin
28. November 2012

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

immo
20. Juni 2013

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

Andreas Kempf
20. Juni 2013

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

immo
20. Juni 2013

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

Andreas Kempf
20. Juni 2013

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

immo
20. Juni 2013

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 {

immo
21. Juni 2013

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?

Andreas Kempf
21. Juni 2013

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

Robert Wildling
4. Februar 2014

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…

Jürgen Franz
16. Juni 2014

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

Andreas Kempf
16. Juni 2014

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

Joachim
1. August 2014

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

Neben den Aspekten der Website Erstellung mit TYPO3 oder Wordpress vom Webdesign bis zur Extensionentwicklung, behandelt dieser BLOG auch das Thema Vermarktung im Internet. Zum Online Marketing gehören u.a. Lokale Suchmaschinenoptimierung, OnPage SEO, Online PR, Content Marketing, Newslettermarketing, Social Media, Webanalyse und vieles mehr.
Viel Spaß und neue Erkenntnisse wünscht
Andreas Kempf, Web-aktiv

web-aktiv.com  |  Kontakt   |  Impressum Datenschutz

Supporting Member of the TYPO3 Association

Werbung

XOVI