Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 07. September 2016 13:39

Gardapro
probiert CMS/ms aus
Registriert: 01. April 2011
Beiträge: 26

Formbuilder: Bild hochladen und innerhalb des Mails zeigen

Hallo

CMSMS 1.12.2
Formbuilder 0.1.8.4
CMSMailer    5.2.14


Ich kann Dateien uploaden und als Anhang an Mails anhängen.
Ich kann auch hochgeladene Bilder innerhalb des Mails als Bild anzeigen lassen.
Doch ich schaffe es nicht, hochgeladene Bilder innerhalb des Mails als Bild anzeigen zu lassen diese jedoch nicht als Anhang mitzusenden.
Die Checkbox "Datei darf nicht an E-Mails angehängt werden:" beeinflusst dies nicht.
und die Checkbox "Unterdrückt Dateinamen in E-Mails und Formularen die der Endbenutzer sieht:" verhindert, dass das Bild innerhalb des Mails angezeigt werden kann.

Im Formular werden 3 Dateien hochgeladen. Zwei sollen als Anhang mit, eines nur als Bild innerhalb des Mails angezeigt werden.

Was kann ich tun?

Beitrag geändert von Gardapro (07. September 2016 13:47)

Offline

#2 08. September 2016 11:56

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Formbuilder: Bild hochladen und innerhalb des Mails zeigen

Gardapro schrieb:

Doch ich schaffe es nicht, hochgeladene Bilder innerhalb des Mails als Bild anzeigen zu lassen diese jedoch nicht als Anhang mitzusenden.

So richtig verstehe ich noch nicht genau, was da passieren soll roll .

Wenn du ein Bild innerhalb einer Mail anzeigen lassen möchtest, muss es grundsätzlich angehangen werden. Ansonsten würde die Mail nicht vollständig angezeigt, wenn das Gerät, auf dem die Mail gelesen/angezeigt wird, im Offline-Modus ist.

Ansonsten wäre lediglich denkbar, dass Bild zwar hochladen und auf dem Server speichern zu lassen, aber in der Mail einen Link auf diese Datei zu platzieren. Ob und wie genau das funktionieren könnte, müsste man dann allerdings noch schauen.

Alternativ ließe sich noch eine Szenerie gestalten, wo das Bild als Data URL in der Mail abgelegt wird. Hätte zur Folge, dass es zwar als Bild angezeigt, aber nicht als Anhang erscheinen würde. Auch hier müsste man bezüglich der Umsetzung mal genauer schauen.

Offline

#3 08. September 2016 13:00

Gardapro
probiert CMS/ms aus
Registriert: 01. April 2011
Beiträge: 26

Re: Formbuilder: Bild hochladen und innerhalb des Mails zeigen

Genau die Lösung mit der Data-Url bin ich am suchen. Kann man CGSmartImage anweisen das Bild mit base64 einzubetten?

Offline

#4 08. September 2016 13:21

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Formbuilder: Bild hochladen und innerhalb des Mails zeigen

Von NaN habe ich ein Plugin dazu noch auf der Platte:

function.base64_image.php

<?php
#-------------------------------------------------------------------------------
#
# Smarty Plugin : {base64_image}
# Purpose       : This plugin returns a base64 encoded image
# Author        : Georg Busch (NaN)
# Copyright     : 2011 Georg Busch (NaN)
# Version       : 1.0
# License       : GPL
#
#-------------------------------------------------------------------------------
 
function smarty_cms_function_base64_image($params, &$smarty) 
{
    global $config;
    $base64_images_path = $config['previews_path'] . DIRECTORY_SEPARATOR . 'base64_images';
    if(isset($params['base64_images_path']))
    {
        $base64_images_path = $config['root_path'] . DIRECTORY_SEPARATOR . $params['base64_images_path'];
    }
    if(!file_exists($base64_images_path))
    {
        @mkdir($base64_images_path , 0755, true);
    }
    $img_path   = $config['root_path'] . DIRECTORY_SEPARATOR . $params['dir'];
    $base64_img = $img_url = $config['root_url'] . '/' . $params['dir'];
     
    // check for IE
    $ie = false;
    $ie_version = 0;
    $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : false;
    if( stripos($user_agent,'msie') !== false && stripos($user_agent,'opera') === false ) {
        $ie_props = explode(' ',stristr(str_replace(';','; ',$user_agent),'msie'));
        $ie_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',str_replace(array('(',')',';'),'',$ie_props[1]));
        $ie = true;
    }
    //---
     
    $img_formats = array('png','jpg','jpeg','gif');
    $filetype = '';
    $use_mime = (isset($params['use_mime']) && (strtolower($params['use_mime']) === 'true' || $params['use_mime'] === '1' || $params['use_mime'] === 1 || $params['use_mime'] === true));
    if($use_mime)
    {
        if (version_compare(PHP_VERSION, '5.3.0') >= 0 && function_exists('finfo_open'))
        {
            $finfo    = finfo_open(FILEINFO_MIME_TYPE);
            $filetype = strtolower(finfo_file($finfo, $img_path));
            finfo_close($img_path);
        }
        else if(function_exists('mime_content_type'))
        {
            $filetype = strtolower(mime_content_type($img_path));
        }
    }
    else
    {
        $fileinfo = pathinfo($img_path);
        if(isset($fileinfo['extension']))
        {
            $filetype = strtolower($fileinfo['extension']);
        }
    }
    $filetype = str_replace('image/','',$filetype);
     
    if(($ie && $ie_version >= 8) || !$ie )
    {
        $base64_img_location    = $base64_images_path . DIRECTORY_SEPARATOR . base64_encode($img_path) . '_' . basename($img_path);
        $base64_img_file_exists = file_exists($base64_img_location);
        $img_file_exists        = file_exists($img_path) && is_file($img_path) && in_array($filetype,$img_formats);
        if($base64_img_file_exists
        && (($img_file_exists && filemtime($base64_img_location) > filemtime($img_path)) || !$img_file_exists)
        && (($ie_version < 9 && filesize($base64_img_location) < 32768) || $ie_version >= 9 || !$ie))
        {
            $base64_img = file_get_contents($base64_img_location);
        }
        else
        {
            @unlink($base64_img_location);
            if(file_exists($img_path) && is_file($img_path) && in_array($filetype,$img_formats))
            {
                $base64_img = 'data:image/'.$filetype.';base64,'.base64_encode(file_get_contents($img_path));
                if($fh = fopen($base64_img_location, 'w'))
                {
                    fwrite($fh,$base64_img);
                    fclose($fh);
                }
                if($ie && $ie_version < 9 && filesize($base64_img_location) > 32768)
                {
                    $base64_img = $img_url;
                }
            }
        }
    }
    if(isset($params['assign']))
    {
        return $smarty->assign($params['assign'], $base64_img);
    }
    echo $base64_img;
}
 
?>

Die Funktion muss noch ein wenig angepasst werden, damit der IE nicht berücksichtigt wird. --> Bei IE wurde kein base64 Kodiertes Bild ausgegeben.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#5 09. September 2016 08:01

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Formbuilder: Bild hochladen und innerhalb des Mails zeigen

Gardapro schrieb:

Kann man CGSmartImage anweisen das Bild mit base64 einzubetten?

Kann man schon, nur sind Module für solche Pippi-Aufgaben oversized wink.

nockenfell schrieb:

Von NaN habe ich ein Plugin dazu noch auf der Platte:

Witzig, hatte mich auch gerade damit befasst

https://www.cmsmadesimple.de/forum/view … hp?id=4865

nockenfell schrieb:

Die Funktion muss noch ein wenig angepasst werden, damit der IE nicht berücksichtigt wird.

Hast du da schon etwas fertig? 

Genau das war mir entfallen, da IE de facto nie nutze...

@Gardapro Damit das aber wunschgemäß funktioniert, müsste man wohl einen Modifikator daraus machen, der das im Text eingebettete Bild erkennt, in Data URLs umwandelt und das Original ersetzt (Stichwort Regex).

Offline