Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Fragen zum Erstellen von Templates für webEdition.
ramon
webEdition Partner
webEdition Partner
Beiträge: 109
Registriert: Do 1. Jan 1970, 02:00
Wohnort: Weimar
Kontaktdaten:

Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon ramon » Mi 9. Okt 2019, 13:10

Seit der Version 8.1 kann das Tag <we:sendMail/> angeblich Anhänge versenden aber wie funktioniert das? Habe jetzt ein wenig rumprobiert aber es funktioniert nicht.

Ich möchte einen Anhang aus einem E-Mail Formular versenden und das am besten mit dem Tag <we:sendMail/>. Geht das jetzt und wenn ja wie? (Formular mit Sendmail Tag, Einstellungen)

Aus dem Tag Editor werde ich nicht schlau. (attachments: Liste von Dateipfaden, die der Mail als Anhang eingefügt werden, TYP CSV / attachmentIDsPflichtfeld: Liste von IDs die der Mail als Anhang eingefügt werden sollen, Typ CSV)

Hat jemand eine Idee?

Vielen Dank für jegliche Infos und Hilfe...
bindestrich - media.
http://www.bindestrich.com
Agentur für Grafikdesign & Webdesign

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon mokraemer » Mi 9. Okt 2019, 15:25

da war wohl noch ein Bug drin, schau mal ob
https://sourceforge.net/p/webedition/so ... .class.php
bei dir geht.
webEdition-Kern-Entwickler

ramon
webEdition Partner
webEdition Partner
Beiträge: 109
Registriert: Do 1. Jan 1970, 02:00
Wohnort: Weimar
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon ramon » Mi 9. Okt 2019, 18:20

Ich habe die Datei we_tag_sendMail.class jetzt getauscht aber alles probieren hilft nichts.

Wie sollte es den funktionieren?
Mein gekürztes Beispiele:

Code: Alles auswählen


<we:ifVar match="1" name="submitted" type="post">
<we:ifFormToken>
<we:sendMail id="224" subject="Eine Nachricht von der Webseite" recipient="muster@muster.de" includeimages="true"	recipientBCC="\$kontakt-email" from="\$kontakt-email" reply="\$kontakt-email" mimetype="text/html" charset="UTF-8" />
<we:else/>
Die Daten wurden bereits gesendet.
</we:ifFormToken>
</we:ifVar>

<we:form id="self" method="post" class="commentForm" name="kontakt" enctype="multipart/form-data">
<input class="form-control" type="file" name="file"  />  
<input type="hidden" name="submitted" value="1" />
<button type="submit" id="submitBtn" class="btn btn-danger mt-2">Jetzt senden</button>
</we:form>
bindestrich - media.
http://www.bindestrich.com
Agentur für Grafikdesign & Webdesign

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon mokraemer » Do 10. Okt 2019, 00:04

z.B. so:

Code: Alles auswählen

<we:sendMail id="224" subject="Eine Nachricht von der Webseite" recipient="muster@muster.de" includeimages="true"	recipientBCC="\$kontakt-email" from="\$kontakt-email" reply="\$kontakt-email" mimetype="text/html" charset="UTF-8" attachmentIDs="1,2,3"/>
Wenn 1,2,3 Bilder, PDFs oder Text-Dateien sind macht das Sinn, für WE-Dokumente nicht.
webEdition-Kern-Entwickler

ramon
webEdition Partner
webEdition Partner
Beiträge: 109
Registriert: Do 1. Jan 1970, 02:00
Wohnort: Weimar
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon ramon » Do 10. Okt 2019, 09:37

Ok, mit internen IDs hat das funktioniert und das ist auch eine Super Funktion. Ich möchte aber keine internen Dokumente versenden sondern Anhänge aus einem Formular übergeben und versenden.

<input class="form-control" type="file" name="anhang" />

Bis jetzt geht das nur mit Formmail aber ich würde das gern mit Sendmail machen da ich mehr Freiräume in der Gestaltung habe.
Hatte das in der Versionshistorie eigentlich so verstanden das es jetzt geht.

VG Ramón
bindestrich - media.
http://www.bindestrich.com
Agentur für Grafikdesign & Webdesign

bolleone
Senior Member
Beiträge: 601
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon bolleone » Mo 23. Mär 2020, 13:09

ramon hat geschrieben: Do 10. Okt 2019, 09:37 Ok, mit internen IDs hat das funktioniert und das ist auch eine Super Funktion. Ich möchte aber keine internen Dokumente versenden sondern Anhänge aus einem Formular übergeben und versenden.

<input class="form-control" type="file" name="anhang" />

Bis jetzt geht das nur mit Formmail aber ich würde das gern mit Sendmail machen da ich mehr Freiräume in der Gestaltung habe.
Hatte das in der Versionshistorie eigentlich so verstanden das es jetzt geht.

VG Ramón
Hallo in die Runde, habt Ihr dafür mittlerweile eine Lösung gefunden? Könnte ich gerade auch gebrauchen...
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

Benutzeravatar
Finn
Senior Member
Beiträge: 285
Registriert: Mo 3. Apr 2017, 13:37
Wohnort: Bremen
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon Finn » Di 24. Mär 2020, 11:27

Moin in die Runde, ich habe das ganze wie folgt umgesetzt:

WICHTIG: Mir ist gerade eingefallen, dass sendMailAttach war glaube ich ein Custom Tag aus der Bugbase oder dem Forum. Sollte aber mittlerweile auch mit sendMail funktionieren.

Das Formular wird an eine Redirect Seite gesendet.

Schritt 1: Ich hole mir die Files aus dem Formular in ein Array und verschiebe sie in ein Serververzeichnis. Zusätzlich
entferne ich die Leerzeichen aus dem Dateinamen und setzte einen Counter.

Code: Alles auswählen

$uploaddir = 'serververzeichnis';

/*Dateien werden hochgeladen und verschoben*/
foreach ($_FILES as $key => $val) {
if ($val['error'] === 0 ){
/*Zähler hochzählen*/
$count++;
/*Leerzeichen aus den Dateinamen entfernen*/
$trimmedName = str_replace(' ', '', $val['name']);
$uploadfile = $uploaddir . '_' . $count . '_' . basename($trimmedName);
if (move_uploaded_file($val['tmp_name'], $uploadfile)) {
// echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
} else {
// echo "Möglicherweise eine Dateiupload-Attacke!\n";
}
// echo 'Weitere Debugging Informationen:';
}
$attachedFiles[$key] = $uploadfile;
}
Schritt 2: Das Files Array in einen Kommaseparierten String umwandeln

Code: Alles auswählen

/*Files Array zu einem Kommaseparierten String umwandeln*/
$attachPath = implode(',', $attachedFiles);
Schritt 3: Versand der Mail (Sollte jetzt auch mit sendMail gehen oder?)

Code: Alles auswählen

<we:sendMailAttach id="196" subject="\$contact_subject" recipient="\$contact_recipient" from="\$contact_sender"
  attachPath="\$attachPath" mimetype="text/html" />
Schritt 4: Dateien wieder löschen

Code: Alles auswählen

<?php 
/*Die Attachments wieder löschen*/
foreach ($attachedFiles as $key => $filename) {
//	echo "$filename size " . filesize($filename) . "\n";
unlink($filename);
}
?>
Falls du Fragen hast, gerne stellen. Geht bestimmt auch irgendwie anders, aber das funktioniert für mich :)

LG
Finn
Finn Thorwarth
WG Werbeagentur
https://www.wg-werbeagentur.de

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon mokraemer » Mi 25. Mär 2020, 11:36

Ja, so kann man das durchaus aktuell machen. Ich würde dazu raten die Anhänge zumindest mal auf Basisdaten zu prüfen.
Dabei kann we_base_util::getMimeType helfen, das kann man dann einfach mit dem/den erlaubten mimes vergleichen. Man muß ja nicht unbedingt ein Virenverseuchtes doc verschicken, wenn man nur ein pdf verschicken will.
webEdition-Kern-Entwickler

bolleone
Senior Member
Beiträge: 601
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon bolleone » Mi 25. Mär 2020, 14:22

Finn hat geschrieben: Di 24. Mär 2020, 11:27 Moin in die Runde, ich habe das ganze wie folgt umgesetzt:

WICHTIG: Mir ist gerade eingefallen, dass sendMailAttach war glaube ich ein Custom Tag aus der Bugbase oder dem Forum. Sollte aber mittlerweile auch mit sendMail funktionieren.

Das Formular wird an eine Redirect Seite gesendet.

Schritt 1: Ich hole mir die Files aus dem Formular in ein Array und verschiebe sie in ein Serververzeichnis. Zusätzlich
entferne ich die Leerzeichen aus dem Dateinamen und setzte einen Counter.

Code: Alles auswählen

$uploaddir = 'serververzeichnis';

/*Dateien werden hochgeladen und verschoben*/
foreach ($_FILES as $key => $val) {
if ($val['error'] === 0 ){
/*Zähler hochzählen*/
$count++;
/*Leerzeichen aus den Dateinamen entfernen*/
$trimmedName = str_replace(' ', '', $val['name']);
$uploadfile = $uploaddir . '_' . $count . '_' . basename($trimmedName);
if (move_uploaded_file($val['tmp_name'], $uploadfile)) {
// echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
} else {
// echo "Möglicherweise eine Dateiupload-Attacke!\n";
}
// echo 'Weitere Debugging Informationen:';
}
$attachedFiles[$key] = $uploadfile;
}
Schritt 2: Das Files Array in einen Kommaseparierten String umwandeln

Code: Alles auswählen

/*Files Array zu einem Kommaseparierten String umwandeln*/
$attachPath = implode(',', $attachedFiles);
Schritt 3: Versand der Mail (Sollte jetzt auch mit sendMail gehen oder?)

Code: Alles auswählen

<we:sendMailAttach id="196" subject="\$contact_subject" recipient="\$contact_recipient" from="\$contact_sender"
  attachPath="\$attachPath" mimetype="text/html" />
Schritt 4: Dateien wieder löschen

Code: Alles auswählen

<?php 
/*Die Attachments wieder löschen*/
foreach ($attachedFiles as $key => $filename) {
//	echo "$filename size " . filesize($filename) . "\n";
unlink($filename);
}
?>
Falls du Fragen hast, gerne stellen. Geht bestimmt auch irgendwie anders, aber das funktioniert für mich :)

LG
Finn
Hallo Finn, ich habe das fast verstanden :-)

Ich habe aber eine konkrete Frage zu dem "Ich hole mir die Files aus dem Formular in ein Array". Nehmen wir mal an, ich habe drei Felder wo ich Dateien auswählen kann:

<input type="file" name="uploaded_file1" size="1000000" accept=".pdf">
<input type="file" name="uploaded_file2" size="1000000" accept=".pdf">
<input type="file" name="uploaded_file3" size="1000000" accept=".pdf">

Bei Deinem Beispiel hast Du die ja irgendwie in $_FILES reingepackt. Wie passiert denn das bzw. wie wird da bei Dir $_FILES definiert?

Sorry, für die Frage, bin da eher Gestalter als Coder ;-)
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

bolleone
Senior Member
Beiträge: 601
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon bolleone » Mi 25. Mär 2020, 15:21

So, ich bin jetzt ein kleines Stück weiter gekommen. Ich habe das mal so wie von Finn beschrieben in mein Projekt eingebaut. Die Email wird auch versendet, nur bekomme ich da folgende Fehlermeldungen:

move_uploaded_file(/uploads/_1_): failed to open stream: No such file or directory
move_uploaded_file(): Unable to move '/tmp/phpxyuizc' to '/uploads/_1_'
unlink(/uploads/_1_): No such file or directory

Welche genauen Pfadangaben soll ich dem Skript denn mitgeben? Den Ordner "uploads" habe ich auf dem Server im Root-Verzeichnis der Website angelegt...
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon mokraemer » Do 26. Mär 2020, 12:59

move_uploaded_file(/uploads/_1_)
nee, du wirst sicher kein solches Verzeichnis auf dem Server anlegen.
nimm einfach TEMP_DIR als Ziel, das ist das we-temp-dir
webEdition-Kern-Entwickler

bolleone
Senior Member
Beiträge: 601
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon bolleone » Do 26. Mär 2020, 14:29

mokraemer hat geschrieben: Do 26. Mär 2020, 12:59
move_uploaded_file(/uploads/_1_)
nee, du wirst sicher kein solches Verzeichnis auf dem Server anlegen.
nimm einfach TEMP_DIR als Ziel, das ist das we-temp-dir
Hallo und danke für die Antwort,

theoretisch verstehe ich das , aber ich bekomme das nicht umgesetzt. Da fehlen mir schlicht die ausreichenden Kenntnisse. Aber ich bin ja lernwillig :-)

Ich habe in meinem Formular

Code: Alles auswählen

<we:form pass_id="kontakt" name="kontakt" nameid="kontakt" id="self" method="post" class="formanizr" enctype="multipart/form-data">
ein

Code: Alles auswählen

<input type="file" name="uploaded_file" size="1000000" accept=".pdf">
Das Formular wird abgeschickt und die Inhalte der inputs erden ganz normal über <we:sendMail> verschickt. Tuts auch alles wie immer. Ich möchte jetzt nur die Datei aus dem Upload-Input als attachment an das <we:sendMail> anhängen. Ich habe das mit einer Datei auch getestet, deren Pfad ich da angegeben habe. Tuts auch.

Ich habe nur keine Idee, wie ich dieses Skript jetzt so anpassen muss, dass die Datei auch temorär auf den Server geladen und der Pfad dann an das <we:sendMail> gehängt wird:

Code: Alles auswählen

$uploaddir = 'serververzeichnis';

/*Dateien werden hochgeladen und verschoben*/
foreach ($_FILES as $key => $val) {
if ($val['error'] === 0 ){
/*Zähler hochzählen*/
$count++;
/*Leerzeichen aus den Dateinamen entfernen*/
$trimmedName = str_replace(' ', '', $val['name']);
$uploadfile = $uploaddir . '_' . $count . '_' . basename($trimmedName);
if (move_uploaded_file($val['tmp_name'], $uploadfile)) {
// echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
} else {
// echo "Möglicherweise eine Dateiupload-Attacke!\n";
}
// echo 'Weitere Debugging Informationen:';
}
$attachedFiles[$key] = $uploadfile;
}
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon mokraemer » Do 26. Mär 2020, 19:44

Code: Alles auswählen

$uploaddir = TEMP_DIR;
webEdition-Kern-Entwickler

Benutzeravatar
Finn
Senior Member
Beiträge: 285
Registriert: Mo 3. Apr 2017, 13:37
Wohnort: Bremen
Kontaktdaten:

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon Finn » Mo 30. Mär 2020, 10:44

Das $_FILES ist ein standard Verzeichnis für File Uploads. Ich verschiebe die Dateien, weil ich sie auf dem Server zusätzlich sichere. Für den Fall, dass das empfangende Mailkonto die Mailgröße nicht empfangen darf.

Du kannst auch wie Mo sagt, die Daten direkt aus dem temporären Verzeichnis holen.

Den Counter kannst du theoretisch auch rauslassen, wenn du den nicht brauchst.

LG
Finn
Finn Thorwarth
WG Werbeagentur
https://www.wg-werbeagentur.de

kuddelmuddel
Member
Beiträge: 63
Registriert: Fr 27. Jan 2012, 13:14

Re: Wie funktioniert we:sendMail mit Anhängen bei V 8.1

Beitragvon kuddelmuddel » Mi 8. Sep 2021, 13:41

Hallo Ihr Lieben,
irgendwie bekomme ich das hier nicht hin. Versuche jetzt seit 2 Tagen einen Upload an sendmail anzuhängen. Scheitere allerdings jedes Mal!!

Habe ein einfaches Formular aufgebaut mit der Möglichkeit ein PDF hochzuladen:

<form method="post" pass_id="contactFormAdvanced" target="_self" id="contactFormAdvanced" name="we_global_form" onsubmit=";if(self.weWysiwygSetHiddenText){weWysiwygSetHiddenText();};return true;" action="/kontakt/kontakt-ok.php" enctype="multipart/form-data">
<input type="file" name="upload" size="100000000" accept=".pdf">
</form>

Dann auf der Folgeseite:
<we:sendMail from="info@xxx.de" recipient="mustermann@xxx.de" attachPath="\$attachPath" ubject="Anfrage über Kontaktformular" id="508" charset="utf-8" mimetype="text/html" enctype="multipart/form-data" />

Mails kommen prima an - ohne Anhang.

An welcher Stelle kommt nun der vorgeschlagene Code hin:

Code: Alles auswählen

$uploaddir = 'TEMP_DIR';

/*Dateien werden hochgeladen und verschoben*/
foreach ($_FILES as $key => $val) {
if ($val['error'] === 0 ){
/*Zähler hochzählen*/
$count++;
/*Leerzeichen aus den Dateinamen entfernen*/
$trimmedName = str_replace(' ', '', $val['name']);
$uploadfile = $uploaddir . '_' . $count . '_' . basename($trimmedName);
if (move_uploaded_file($val['tmp_name'], $uploadfile)) {
// echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
} else {
// echo "Möglicherweise eine Dateiupload-Attacke!\n";
}
// echo 'Weitere Debugging Informationen:';
}
$attachedFiles[$key] = $uploadfile;
}

Habe alles mögliche versucht - bin zu doof dafür. Kann mir jemand so ganz einfach sagen was wann wohin soll???

Das wäre toll. - PS verwende noch die 8.1.5

glg


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 14 Gäste