Pberndt V4

Direkt zum Inhalt springen


Quellcode Webmailer.php

Beschreibung

Dieses Script bietet einen Webmailer, mit dem man eine beliebige Zahl Attachments und Text an eine Emailadresse schicken kann. Lediglich die Email Adresse muss angepasst werden.
Zur Funktion müssen auf Userseite Cookies aktiviert sein, da sich das Script so "merkt", wem welche Attachments gehören.

Sourcecode


<?php

    /*
        Emails mit Attachment verschicken
       
        Aktion: PHP Scripte für die armen dieser Welt
        Der Erlös geht für mein Pausenbrot drauf

        Copyright (c) 2005 by Phillip 'Firebird' Berndt
    */

   
    // Konfiguration
    $sendTo = 'spam@webmail.web';
   
    // Session Mist deaktivieren
    ini_set('session.use_trans_sid', '0');
    ini_set('session.use_only_cookies', '1');
   
    // Jeder User bekommt seine eigene Session
    session_name('sendMail_Session');
    session_cache_expire(60);
    session_start();
       
    // Die Email gegen Crawler schützen
    $sendTo_Htmlized = htmlspecialchars(str_replace(array('@', '.'), array(' [AUF] ', ' [PUNKT] '), $sendTo));
   
    // Defaultwerte
    if(!isset($_POST['subject']))
        $_POST['subject'] = 'Webformular vom '.date('d.m.Y');
       
    // Die Requests handeln
    // Attachment anfügen
    if(isset($_POST['addAttachment']) && $_FILES['attachment']['error'] == 0)
    {
        if(!isset($_SESSION['attachments']))
            $_SESSION['attachments'] = array();
           
        $newAttachment = &$_SESSION['attachments'][];
        $newAttachment['name'] = $_FILES['attachment']['name'];
        $newAttachment['size'] = $_FILES['attachment']['size'];
        $newAttachment['data'] = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'])));
       
        $_SESSION['tmpPost'] = $_POST;
        header('Location: '.$_SERVER['PHP_SELF'].'#attachments');
        die();
    }
    // Attachment löschen
    elseif(isset($_POST['deleteAttachment']))
    {
        unset($_SESSION['attachments'][array_shift(array_keys($_POST['deleteAttachment']))]);
       
        $_SESSION['tmpPost'] = $_POST;
        header('Location: '.$_SERVER['PHP_SELF'].'#attachments');
        die();
    }
    // Alles löschen
    elseif(isset($_POST['clear']))
    {
        session_destroy();
        header('Location: '.$_SERVER['PHP_SELF']);
        die();
    }
    // Email verschicken
    elseif(isset($_POST['submit']))
    {   
        // Ein Boundary erstellen
        $mailBoundary = uniqid(time());
       
        // Die Mail Header erstellen
        $mailHeader = 'From: webmailer@'.$_SERVER['HTTP_HOST']."\n".
            'MIME-version: 1.0'."\n".
            'Content-type: multipart/mixed; '.
            'boundary="'.$mailBoundary.'"'."\n";
           
        // Den Mailbody zusammenfassen
        $mailData =
            'This is a multi-part message in MIME format.'."\n".
            '--'.$mailBoundary."\n".
            'Content-Type: text/plain; charset=ISO-8859-1'."\n".
            'Content-Transfer-Encoding: 8bit'."\n\n".
            'Email über Webformular verschickt von: '.$_SERVER['REMOTE_ADDR'].' ('.
            gethostbyaddr($_SERVER['REMOTE_ADDR']).')'.
            "\n-------------------------------------\n\n".
            $_POST['message']."\n".
            '--'.$mailBoundary."\n";
       
        // Attachments anfügen
        if($_SESSION['attachments'])
            foreach($_SESSION['attachments'] as $attachment)
            {
                $mailData .=
                    'Content-Type: application/octet-stream;'."\n".
                    ' name="'.$attachment['name'].'"'."\n".
                    'Content-Transfer-Encoding: base64'."\n".
                    'Content-Disposition: attachment;'."\n".
                    ' filename="'.$attachment['name'].'"'."\n\n".
                    $attachment['data']."\n".'--'.$mailBoundary."\n";
            }
       
        $mailData = substr($mailData, 0, -2).'--';
       
        // Email verschicken
        mail($sendTo, $_POST['subject'], $mailData, $mailHeader);
       
        // Die Session beenden
        $mailSize = number_format(round((strlen($mailData) + strlen($mailHeader)) / 1024, 2), 2, ',', '.').' KB';
        session_destroy();
        unset($_SESSION);
    }
   
    // Post zurücksetzen
    if(isset($_SESSION['tmpPost']))
    {
        $_POST = $_SESSION['tmpPost'];
        unset($_SESSION['tmpPost']);
    }
   
?>
<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">   
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
            html, body, input, textarea
            {
                font-family:                sans-serif;
                font-size:                    12px;
            }
            input[type=text], textarea
            {
                width:                        80%;
                color:                        #444444;
            }
            li input[name^=delete]
            {
                border:                        none;
                background-color:            #FFFFFF;
                margin:                        0px;
                padding:                    0px;
                color:                        #444444;
            }
            a
            {
                text-decoration:            none;
                border-bottom:                1px dashed #518AFF;
                color:                    #000000;
            }
            textarea
            {
                height:                    300px;
                margin-left:                100px;
            }
            input:focus, textarea:focus
            {
                color:                        #000000;
            }
            h1, h2
            {
                background-color:            #88A9EB;
                border-left:                10px solid #518AFF;
                padding-left:                20px;
                color:                        #0E2147;
            }
            h2, form
            {
                margin-left:                15px;
            }
            h3
            {
                border-bottom:                1px solid #518AFF;
                border-top:                    1px solid #518AFF;
                width:                        100px;
            }
            form p
            {
                margin-left:                15px;
            }
            form p > label
            {
                width:                        100px;
                float:                        left;
            }
            input[readonly]
            {
                color:                        #777777;
            }
            br
            {
                clear:                        left;
            }
            form p:last-child
            {
                margin-left:                0px;
            }
            body > p, #sending > p
            {
                margin-left:                15px;
                padding-left:                5px;
                border-left:                1px solid #518AFF;
            }
            #sending
            {
                position:                    absolute;
                left:                        0px;
                width:                        100%;
                height:                        100%;
                background-color:            #FFFFFF;
                z-index:                    42;
                display:                    none;
            }
        </style>       
        <title>Email versenden</title>
    </head>
    <body>
<?php
    if(!session_id())
    {
?>
        <h1>Email versenden</h1>
        <p>
            Die Email wurde erfolgreich an <em><?=$sendTo_Htmlized?></em> versandt.<br/>
            Sie hat eine Größe von <?=$mailSize?>.
        </p>
        <p>
            <a href="<?=$_SERVER['PHP_SELF']?>">Zurück</a>
        </p>
    </body>
</html>
<?php
        die();
    }
   
?>        <h1>Email versenden</h1>
        <div id="sending">
            <p>
                Die Seite wird aktualisiert. Hierzu müssen viele Daten (Attachments..) zum Server,
                bzw. zum Emailaccount gesendet werden.<br/><br/>
                Daher kann dieser Vorgang mitunter mehrere Minuten andauern.<br/><br/>
                Bitte habe einen Moment Geduld..
            </p>
        </div>
        <p>
            Mit Hilfe dieses Scripts können Emails an <em><?=$sendTo_Htmlized?></em>
            verschickt werden. IP und Userinformationen werden übermittelt, jedwedige Nutzung
            dieses Services für Spam, Viren, etc. wird dem für die IP zuständigem Provider
            mitgeteilt und durch diesen entsprechend geahndet.
        </p>
        <h2>Email</h2>
        <form method="post" action="<?=$_SERVER['PHP_SELF']?>" enctype="multipart/form-data"
            onsubmit="document.getElementById('sending').style.display='block';
                      window.scrollTo(0, 0);
">
            <h3>Daten</h3>
            <p>
                <label for="to">An</label>
                <input size="70" type="text" name="to" id="to" value="<?=$sendTo_Htmlized?>" readonly="readonly"/><br/>

                <label for="subject">Betreff</label>
                <input size="70" type="text" name="subject" id="subject" value="<?=htmlspecialchars($_POST['subject'])?>" /><br/>
            </p>
                <h3><label for="message">Text</label></h3>
                <p>
                    <textarea rows="20" cols="70" name="message" id="message"><?=htmlspecialchars($_POST['message'])?></textarea><br/>
                </p>
            <h3 id="attachments">Attachments</h3>
            <ol><?php
           
                if($_SESSION['attachments'])
                    foreach($_SESSION['attachments'] as $attachment)
                        echo("\n                    ".
                            '<li><input type="submit" name="deleteAttachment['.$id.']" value="Löschen" /> <em>'.$attachment['name'].'</em> ('.
                            (number_format(round($attachment['size'] / 1024, 2), 2, ',', '.')).' KB) '.
                            '</li>');           
            ?>
                <li style="list-style-type: circle">
                    <label for="attachment">Attachment anfügen</label><br/>
                    <input type="file" name="attachment" id="attachment" />
                    <input type="submit" name="addAttachment" value="Attachment anfügen" />
                </li>
            </ol>
            <p>
                <input type="submit" name="submit" value="Abschicken" />
                <input type="submit" name="clear" value="Zurücksetzen" />
            </p>
        </form>
    </body>
</html>

Download

Dateiname
Webmailer.php
Größe
10.33kb