Seite 1 von 1

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

Verfasst: Mi 9. Okt 2019, 13:10
von ramon
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...

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

Verfasst: Mi 9. Okt 2019, 15:25
von mokraemer
da war wohl noch ein Bug drin, schau mal ob
https://sourceforge.net/p/webedition/so ... .class.php
bei dir geht.

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

Verfasst: Mi 9. Okt 2019, 18:20
von ramon
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>

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

Verfasst: Do 10. Okt 2019, 00:04
von mokraemer
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.

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

Verfasst: Do 10. Okt 2019, 09:37
von ramon
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

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

Verfasst: Mo 23. Mär 2020, 13:09
von bolleone
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...

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

Verfasst: Di 24. Mär 2020, 11:27
von Finn
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

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

Verfasst: Mi 25. Mär 2020, 11:36
von mokraemer
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.

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

Verfasst: Mi 25. Mär 2020, 14:22
von bolleone
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 ;-)

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

Verfasst: Mi 25. Mär 2020, 15:21
von bolleone
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...

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

Verfasst: Do 26. Mär 2020, 12:59
von mokraemer
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

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

Verfasst: Do 26. Mär 2020, 14:29
von bolleone
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;
}

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

Verfasst: Do 26. Mär 2020, 19:44
von mokraemer

Code: Alles auswählen

$uploaddir = TEMP_DIR;

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

Verfasst: Mo 30. Mär 2020, 10:44
von Finn
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

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

Verfasst: Mi 8. Sep 2021, 13:41
von kuddelmuddel
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