[UPDATE 26.7.07] PHP Mailerclass mit Massenmailfunktion und MailBB-Code

Diskutiere und helfe bei [UPDATE 26.7.07] PHP Mailerclass mit Massenmailfunktion und MailBB-Code im Bereich Webmaster Support, Scripts, etc im SysProfile Forum bei einer Lösung; Habe hier mit nem Kumpel eine kleine PHP-Class geschrieben. Hoffe, die gefällt euch und findet Anklang. Sie beschreibt sich selbst im Code ;) <?php... Dieses Thema im Forum "Webmaster Support, Scripts, etc" wurde erstellt von Spacerat, 24. Juli 2007.

  1. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911

    Habe hier mit nem Kumpel eine kleine PHP-Class geschrieben. Hoffe, die gefällt euch und findet Anklang. Sie beschreibt sich selbst im Code ;)

    PHP:
    <?php
    #################################################
    ##
    ##
    ##        BBCode Supporting E-Mail Class
    ##        with massmail function
    ##
    ##        Author: SynN and fanrpg (c) 2007
    ##        Date: 07/23/07
    ##
    ##        Version: 1.0.0
    ##        
    ##        Licensed under GNU Public License
    ##        http://opensource.org/licenses/gpl-license.php
    ##
    ##
    #################################################

    #################################################
    ##
    ##        Example:
    ##        
    ##        $mail = new Email();
    ##
    ##        $mail->set("from", "absender@example.com");
    ##        $mail->set("to", "empfaenger@example.com"); // You can use mto to send massmail ( $mail->set("mto", array("mail@example.com", "mail2@example.com")) )
    ##        $mail->set("subject", "Betreff"); // Subject for mail
    ##        $mail->set("html", 1) // html email 1 = on, 0 = off
    ##        $mail->set("mailbb", 1) // bbcode for mails 1 = on, 0 = off
    ##        $mail->set("message", "Message of the Mail");
    ##        $mail->send();
    ##        $mail->clean();
    ##
    ##        Optional commands:
    ##
    ##        $mail->set("header", "own header"); // to set own header..
    ##        $mail->set("bcc", "bcc@example.com"); // to send a blindcopy
    ##        $mail->set("cc", "cc@example.com"); // to send a copy
    ##
    ##        You can use mbcc, mcc to send mass bcc or cc, like to use mto.
    ##        You can also combine to and mto, cc and mcc, bcc and mbcc and all of them with arrays or just strings.
    ##
    #################################################

    class Email
    {
        var 
    $from;
        var 
    $to;
        var 
    $subject;
        var 
    $headers;
        var 
    $bcc;
        var 
    $cc;
        var 
    $message;
        var 
    $mailbb;
        var 
    $html = false;
        var 
    $send = false;
        
        
        function 
    set($type, $value)
        {
            switch( 
    $type )
            {
                case 
    'html':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->html = true;
                        
    $this->set("header", "Content-Type: text/html");
                        
    $this->set("header", "Content-Transfer-Encoding: 8bit");
                    }
                    break;
                case 
    'from':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->from = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'to':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->to = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'subject':
                    if( !empty(
    $value) )
                    {
                        
    $value = stripslashes($value);
                        
    $value = htmlspecialchars($value);
                        
                        
    $this->subject = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'bcc':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->bcc = $value;
                    }
                    break;
                case 
    'cc':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->cc = $value;
                    }
                    break;
                case 
    'message':
                    
    $message = stripslashes($value);
                    if( 
    $this->html !== true )
                    {
                        
    $message = strip_tags($message);
                    }
                    
                    
    $this->message = $message;
                    
                    break;    
                case 
    'mto':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_to($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->to) )
                        {
                            
    $this->to = $value;
                        }
                        else
                        {
                            
    $this->to .= ", " . $value;
                        }
                    }
                    break;
                case 
    'mcc':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_cc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->cc) )
                        {
                            
    $this->cc = $value;
                        }
                        else
                        {
                            
    $this->cc .= ", " . $value;
                        }
                    }
                    break;
                case 
    'mbcc':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_bcc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->bcc) )
                        {
                            
    $this->bcc = $value;
                        }
                        else
                        {
                            
    $this->bcc .= ", " . $value;
                        }
                    }
                    break;
                case 
    'header':
                    
    $this->set_header($value);
                    break;
                case 
    'mailbb':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->mailbb = true;
                    }
                    break;
                default:
                    return 
    false;
            }
        }
        
        function 
    multiple_to( $to )
        {
            if( !
    is_array($to) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $to as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->to) )
                            {
                                
    $this->to = $mail;
                            }
                            else
                            {
                                
    $this->to .= ", " . $mail;
                            }

                        }
                    }
                }
            }    
        }
        
        function 
    multiple_cc( $cc )
        {
            if( !
    is_array($cc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $cc as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->cc) )
                            {
                                
    $this->cc = $mail;
                            }
                            else
                            {
                                
    $this->cc .= ", " . $mail;
                            }
                        }
                    }
                }
            }    
        }
        
        function 
    multiple_bcc( $bcc )
        {
            if( !
    is_array($bcc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $bcc as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->bcc) )
                            {
                                
    $this->bcc = $mail;
                            }
                            else
                            {
                                
    $this->bcc .= ", " . $mail;
                            }
                        }
                    }
                }
            }    
        }
        
        function 
    set_header( $header )
        {
            
    $headers = $this->headers;
            
            
    $headers = preg_replace("#\r\n\r\n$#", "\r\n", $headers);
            
            
    $headers .= $header . "\r\n";
            
            
    $this->headers = $headers;
        }
        
        function 
    mailbb( $message )
        {
            
    $search = array(
                
    '\[b\](.*?)\[/b\]' => '<strong>\1</strong>',
                
    '\[i\](.*?)\[/i\]' => '<i>\1</i>',
                
    '\[u\](.*?)\[/u\]' => '<u>\1</u>',        
                
    '\[center\](.*?)\[/center\]' => '<div style="width:100%; text-align:center;">\1</div>',
                
    '\[url=(.*?)\](.*?)\[/url\]' => '<a href="\1">\2</a>',
                
    '\[url\](.*?)\[/url\]' => '<a href="\1">\1</a>',
                
    '\[color=(.*?)\](.*?)\[/color\]' => '<span style="color:\1;">\2</span>',
                
    '\[img=(.*?)\](.*?)\[/img\]' => '<img src="\1" alt="\2" border="0" />',
                
    '\[img\](.*?)\[/img\]' => '<img src="\1" alt="Image" border="0" />'
            
    );
        
            foreach(
    $search as $s => $r)
            {
                
    $message = preg_replace("#" . $s . "#is", $r, $message);
            }
            
            
    $message = '<html>
            <head>
            <title>'
    . $this->subject .'</title>
            </head>
            <body>' 
    . str_replace("\n", "\n<br />\n", $message) .'</body>
            </html>'
    ;
            
            return 
    $message;
        }
        
        function 
    send()
        {
            if( 
    is_array($this->to) )
            {
                foreach(
    $this->to as $mail)
                {
                    
    $to .= $mail .", ";
                }
                
    $this->to = $to;
            }
            
            
    $this->set("header", "From: " . $this->from);
            
    $this->set("header", "To: " . $this->to);
            
            if ( !empty(
    $this->cc) && isset($this->cc) )
            {
                
    $this->set("header", "CC: " . $this->cc);
            }
            
            if ( !empty(
    $this->bcc) && isset($this->bcc) )
            {
                
    $this->set("header", "BCC: " . $this->bcc);
            }
            
            
    $this->set("header", "X-Powered-By: fanrpg, SynN");
            
    $this->set("header", "X-Mailer: PHP/". phpversion());
            
    $this->set("header", "Return-Path: ". $this->from);
            
            if( 
    $this->mailbb === true && $this->html !== true )
            {
                
    $this->message = strip_tags($this->message);
                
    $this->set("header", "Content-Type: text/html");
                
    $this->set("header", "Content-Transfer-Encoding: 8bit");                    
            }
            
            if( 
    $this->mailbb === true )
            {
                
    $this->message = $this->mailbb($this->message);
            }
            
            if( !
    mail($this->to, $this->subject, $this->message, $this->headers . "\r\n") )
            {
                return 
    false;
            }
            else
            {
                
    $this->send = true;
            }
        }
        
        function 
    clean()
        {
            
    $this->to = "";
            
    $this->from = "";
            
    $this->subject = "";
            
    $this->headers = "";
            
    $this->message = "";
            
    $this->bcc = "";
            
    $this->cc = "";
            
    $this->send = false;
            
    $this->html = false;
        }
    }
    ?>
     
  2. alex
    alex killed in action
    Registriert seit:
    30. Dezember 2006
    Beiträge:
    8.187
    Zustimmungen:
    282
    1. SysProfile:
    63644
    2. SysProfile:
    18897
    40873

    also soweit ich das versteh, ist das ein PHP-Mailer, oder? :o
    also nur die funktion
     
  3. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Themenstarter
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911
    jap, die mailerclass. Die kannste includen, dann halt mails damit verschicken. Erlaubt auch HTML-Mails ;)
     
  4. alex
    alex killed in action
    Registriert seit:
    30. Dezember 2006
    Beiträge:
    8.187
    Zustimmungen:
    282
    1. SysProfile:
    63644
    2. SysProfile:
    18897
    40873
    okay ich hab mir das mal kopiert, vllt brauch ich's irgendwann mal :D
     
  5. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Themenstarter
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911
    Als kleines Update wurde nun ein einfaches Template-System hinzugefügt. Alles wichtige steht im Beispiel beschrieben. Vielleicht finden sich ja auch ein paar Fans mehr als nur alexirsi ;)

    PHP:
    <?php
    #################################################
    ##
    ##
    ##        BBCode Supporting E-Mail Class
    ##        with massmail function
    ##
    ##        Author: SynN/Spacerat and fanrpg (c) 2007
    ##        Date: 07/23/07
    ##
    ##        Version: 1.1.0
    ##        
    ##        Licensed under GNU Public License
    ##        http://opensource.org/licenses/gpl-license.php
    ##
    ##
    #################################################

    #################################################
    ##
    ##         History:
    ##
    ##        v1.0.0 
    ##            - First Public Release
    ##
    ##        v1.1.0
    ##            - Added template system for emails from private version
    ##
    #################################################

    #################################################
    ##
    ##        Example:
    ##        
    ##        $mail = new Email();
    ##
    ##        $mail->set("from", "absender@example.com");
    ##        $mail->set("to", "empfaenger@example.com"); // You can use mto to send massmail ( $mail->set("mto", array("mail@example.com", "mail2@example.com")) )
    ##        $mail->set("subject", "Betreff"); // Subject for mail
    ##        $mail->set("html", 1) // html email 1 = on, 0 = off
    ##        $mail->set("mailbb", 1) // bbcode for mails 1 = on, 0 = off
    ##        $mail->set("message", "Message of the Mail");
    ##        $mail->send();
    ##        $mail->clean();
    ##
    ##        Optional commands:
    ##
    ##        $mail->set("header", "own header"); // to set own header..
    ##        $mail->set("bcc", "bcc@example.com"); // to send a blindcopy
    ##        $mail->set("cc", "cc@example.com"); // to send a copy
    ##        $mail->set("template", "./path/filename.html"); // to set a template file
    ##        $mail->set("template_vars", array(
    ##            'NAME' => 'Value',
    ##            'NAME_VAR' => $value
    ##        )); // To set template vars.. no loops, manually message was then before template message, html is auto enabled
    ##
    ##        You can use mbcc, mcc to send mass bcc or cc, like to use mto.
    ##        You can also combine to and mto, cc and mcc, bcc and mbcc and all of them with arrays or just strings.
    ##
    #################################################

    class Email
    {
        var 
    $from;
        var 
    $to;
        var 
    $subject;
        var 
    $headers;
        var 
    $bcc;
        var 
    $cc;
        var 
    $message;
        var 
    $mailbb;
        var 
    $mail_tpl;
        var 
    $html = false;
        var 
    $send = false;
        
        
        function 
    set($type, $value)
        {
            switch( 
    $type )
            {
                case 
    'html':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->html = true;
                        
    $this->set("header", "Content-Type: text/html");
                        
    $this->set("header", "Content-Transfer-Encoding: 8bit");
                    }
                    break;
                case 
    'from':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->from = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'to':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->to = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'subject':
                    if( !empty(
    $value) )
                    {
                        
    $value = stripslashes($value);
                        
    $value = htmlspecialchars($value);
                        
                        
    $this->subject = $value;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'bcc':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->bcc = $value;
                    }
                    break;
                case 
    'cc':
                    if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $value) )
                    {
                        
    $this->cc = $value;
                    }
                    break;
                case 
    'message':
                    
    $message = stripslashes($value);
                    if( 
    $this->html !== true )
                    {
                        
    $message = strip_tags($message);
                    }
                    
                    
    $this->message = $message;
                    
                    break;    
                case 
    'mto':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_to($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->to) )
                        {
                            
    $this->to = $value;
                        }
                        else
                        {
                            
    $this->to .= ", " . $value;
                        }
                    }
                    break;
                case 
    'mcc':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_cc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->cc) )
                        {
                            
    $this->cc = $value;
                        }
                        else
                        {
                            
    $this->cc .= ", " . $value;
                        }
                    }
                    break;
                case 
    'mbcc':
                    if ( 
    is_array($value) )
                    {
                        
    $this->multiple_bcc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->bcc) )
                        {
                            
    $this->bcc = $value;
                        }
                        else
                        {
                            
    $this->bcc .= ", " . $value;
                        }
                    }
                    break;
                case 
    'header':
                    
    $this->set_header($value);
                    break;
                case 
    'mailbb':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->mailbb = true;
                    }
                    break;
                case 
    'template':
                    if( 
    file_exists($value) )
                    {
                        if( !(
    $tpl = file_get_contents($value)) )
                        {
                            if( 
    $handle = fopen($value, "r") )
                            {
                                
    $tpl = fread($handle, filesize($value));
                                
    fclose($handle);
                            }
                            else
                            {
                                return 
    false;
                            }
                        }
                    }
                    else
                    {
                        return 
    false;
                    }
                    
    $this->mail_tpl = $tpl;
                    break;
                case 
    'template_vars':
                    if( !
    is_array($value) )
                    {
                        return 
    false;
                    }
                    else
                    {
                        foreach( 
    $value as $name => $var )
                        {
                            
    $this->mail_tpl = str_replace("{var ". $name ."}", $var, $this->mail_tpl);
                        }
                        
                        
    $this->message = ( empty($this->message) ) ? $this->mail_tpl : $this->message . $this->mail_tpl;
                        
    $this->set("html", 1);
                    }
                    break;
                default:
                    return 
    false;
            }
        }
        
        function 
    multiple_to( $to )
        {
            if( !
    is_array($to) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $to as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->to) )
                            {
                                
    $this->to = $mail;
                            }
                            else
                            {
                                
    $this->to .= ", " . $mail;
                            }

                        }
                    }
                }
            }    
        }
        
        function 
    multiple_cc( $cc )
        {
            if( !
    is_array($cc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $cc as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->cc) )
                            {
                                
    $this->cc = $mail;
                            }
                            else
                            {
                                
    $this->cc .= ", " . $mail;
                            }
                        }
                    }
                }
            }    
        }
        
        function 
    multiple_bcc( $bcc )
        {
            if( !
    is_array($bcc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $bcc as $mail )
                    {
                        if( 
    preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i", $mail) )
                        {
                            if ( empty(
    $this->bcc) )
                            {
                                
    $this->bcc = $mail;
                            }
                            else
                            {
                                
    $this->bcc .= ", " . $mail;
                            }
                        }
                    }
                }
            }    
        }
        
        function 
    set_header( $header )
        {
            
    $headers = $this->headers;
            
            
    $headers = preg_replace("#\r\n\r\n$#", "\r\n", $headers);
            
            
    $headers .= $header . "\r\n";
            
            
    $this->headers = $headers;
        }
        
        function 
    mailbb( $message )
        {
            
    $search = array(
                
    '\[b\](.*?)\[/b\]' => '<strong>\1</strong>',
                
    '\[i\](.*?)\[/i\]' => '<i>\1</i>',
                
    '\[u\](.*?)\[/u\]' => '<u>\1</u>',        
                
    '\[center\](.*?)\[/center\]' => '<div style="width:100%; text-align:center;">\1</div>',
                
    '\[url=(.*?)\](.*?)\[/url\]' => '<a href="\1">\2</a>',
                
    '\[url\](.*?)\[/url\]' => '<a href="\1">\1</a>',
                
    '\[color=(.*?)\](.*?)\[/color\]' => '<span style="color:\1;">\2</span>',
                
    '\[img=(.*?)\](.*?)\[/img\]' => '<img src="\1" alt="\2" border="0" />',
                
    '\[img\](.*?)\[/img\]' => '<img src="\1" alt="Image" border="0" />'
            
    );
        
            foreach(
    $search as $s => $r)
            {
                
    $message = preg_replace("#" . $s . "#is", $r, $message);
            }
            
            
    $message = '<html>
            <head>
            <title>'
    . $this->subject .'</title>
            </head>
            <body>' 
    . str_replace("\n", "\n<br />\n", $message) .'</body>
            </html>'
    ;
            
            return 
    $message;
        }
        
        function 
    send()
        {
            if( 
    is_array($this->to) )
            {
                foreach(
    $this->to as $mail)
                {
                    
    $to .= $mail .", ";
                }
                
    $this->to = $to;
            }
            
            
    $this->set("header", "From: " . $this->from);
            
    $this->set("header", "To: " . $this->to);
            
            if ( !empty(
    $this->cc) && isset($this->cc) )
            {
                
    $this->set("header", "CC: " . $this->cc);
            }
            
            if ( !empty(
    $this->bcc) && isset($this->bcc) )
            {
                
    $this->set("header", "BCC: " . $this->bcc);
            }
            
            
    $this->set("header", "X-Powered-By: fanrpg, SynN");
            
    $this->set("header", "X-Mailer: PHP/". phpversion());
            
    $this->set("header", "Return-Path: ". $this->from);
            
            if( 
    $this->mailbb === true && $this->html !== true )
            {
                
    $this->message = strip_tags($this->message);
                
    $this->set("header", "Content-Type: text/html");
                
    $this->set("header", "Content-Transfer-Encoding: 8bit");                    
            }
            
            if( 
    $this->mailbb === true )
            {
                
    $this->message = $this->mailbb($this->message);
            }
            
            if( !
    mail($this->to, $this->subject, $this->message, $this->headers . "\r\n") )
            {
                return 
    false;
            }
            else
            {
                
    $this->send = true;
            }
        }
        
        function 
    clean()
        {
            
    $this->to = "";
            
    $this->from = "";
            
    $this->subject = "";
            
    $this->headers = "";
            
    $this->message = "";
            
    $this->bcc = "";
            
    $this->cc = "";
            
    $this->mail_tpl = "";
            
    $this->send = false;
            
    $this->html = false;
        }
    }
    ?>
     
  6. fas
    fas Hardware-Wissenschaftler
    Registriert seit:
    24. Juli 2007
    Beiträge:
    497
    Zustimmungen:
    4
    1. SysProfile:
    32074
    2. SysProfile:
    36546
    Hallo, hab mir mal dein script angeschaut. Ist nicht schlecht, hätte da aber ein paar Anregungen. Bitte nicht als Kritik verstehen ;-)


    1.: Für den Massenmailversand wäre es für den Verwender der Klasse einfacher, wenn man einfach als "to" ein Array angeben könnte,
    da ganz simpel per is_array() geprüft werden könnte, ob es sich um einen oder mehrere Empfänger handelt und das ganze dann entsprechend in der Klasse verwurschtet werden könnte.

    2.: CC ist quasi unnötig, da ja auch an mehrere Adressen gesendet werden kann - kann man aber auch lassen, falls doch mal ein CC gebraucht wird.
    Außerdem ist für den, der die Klasse nur verwenden möchte und nicht ins Innenleben schauen will unklar,
    ob, wenn er eine Massenmail schickt, bei jeder Mail eine CC/BCC gesendet wird, wenn CC/BCC angegeben.

    3.: Wieder für den, der die Klasse nur verwenden will, ist unklar, von welchem Pfad aus das Template
    included werden soll. Vom Server-Root aus? Vom aktuellen Verzeichnis? Dazu muss er in die Klasse reinschauen.

    4.: Wenn die Nachricht leer ist, wird nur das Template gesendet - welchen Sinn hat das?

    5.: Das Template wird nur an den Text angefügt. Was ist, wenn man den Text innerhalb des Templates haben will? Hier wäre eine Möglichkeit, sowas wie ##text## im Template einzubauen, an deren Stelle der Text eingefügt wird, sinniger.

    6.: Es wird nirgens beschrieben, wie die Variabeln einzusetzen sind ({var XY}).

    7.: Wieder für den, der es nur verwenden will, ist überhaupt mal unklar, was die Variabeln für einen Sinn haben,
    bzw. wo sie durch was ersetzt werden (sollen).

    8.: Die Emailprüfung ist sehr schlecht. Das sieht mir nach was geklautem aus. Außerdem lehnt es so manche gültige Emailadresse ab, wie z.B. hänschen@hänschenhausen.travel - Umlaute werden nicht akzeptiert und abgesehen von "museum" wird auch keine Domainendung mit mehr als 4 Zeichen akzeptiert. Desweiteren werden Großbuchstaben und Sonderzeichen nicht akzeptiert - wobei dies beides vor dem @ durchaus vorkommen kann.

    9.: Die Prüfung der Emailadressen hätte man leichter in z.B. eine Funktion ausgelagert, da so bei einer evtl.
    Änderung des Prüfstrings nur einmal alles geändert werden müsste.
    Da es aber für die FROM/TO/CC/BCC jedesmal extra kopiert wurde, muss man es im Falle einer Änderung überall
    umschreiben. Das bedeutet nicht nur einen zeitlichen Mehraufwand, sondern auch eine weitere Fehlerquelle.

    10.: Die Funktionen multiple_to/multiple_cc/multiple_bcc sind bis auf die Änderung TO/CC/BCC identisch.
    Einfacher wäre hier, eine Funktion multiple_X($person_to_send,$person_type), und dann einfach jeweils TO/CC/BCC
    dynamisch innerhalb der Funktion zu bestimmen, bzw. einfach die Rückgabe als TO/CC/BCC zu setzen. Spart wieder Tipparbeit & Speicher und eine Fehlerquelle mehr wird beseitigt. Außerdem ist hier wieder die gecopy&gepastete Version der Emailprüfung drin...


    Im Großen und Ganzen ist die Klasse zwar recht übersichtlich gehalten, es fehlen jedoch jedliche Kommentare innerhalb der Klasse.

    Wünsche noch viel Spass beim coden.

    MFG
     
  7. Spacerat
    Spacerat ٩(̾●̮̮̃̾•̃̾)۶ /dev/null
    Themenstarter
    Registriert seit:
    25. Dezember 2006
    Beiträge:
    8.597
    Zustimmungen:
    196
    Name:
    Christian
    1. SysProfile:
    11226
    Steam-ID:
    Spacerat2911
    Dafür gibt es doch mto, mit Array-use ;)
    Wir haben diese Funktionen extra auch klar noch einmal getrennt, um den "User" nicht zu verunsichern.

    CC hat ja seinen Grund, nicht nur bei dem Script. CC bedeutet Carbon Copy, so viel wie "Durchschlag", z.B. wenn jemand das nur "nebenbei" bekommen soll. Ich z.B. filtere zu Haus auch meine Mails nach An und CC.. Wenn ich nur einen "Durchschlag" bekomme und kein Hauptempfänger sind, weiß ich z.B., dass ich mich nicht sofort um diese Mail kümmern muss ;)

    Das kann man aus jedem Pfad nehmen. Der Pfad wird nicht explizit vorher deklariert sondern direkt vom "User" angegeben, relativ zum Aufruf-Pfad des Hauptscripts, dass die Class included.

    Dafür sind doch Variablen da, jeder Benutzer des Scripts hat doch die Chance, entweder das Template zu nutzen ODER einen Text zu senden. Wenn an ein Template noch was angehängt werden soll, kann zum Template doch noch Text versendet werden. Wenn das Template leer ist, kann ich/können wir dagegen ja nix machen ;)

    Wie gesagt, Templatevariablen ;)

    Ok, das reichen wir nach ;D

    Die ist eigentlich standard. Gut, es gibt noch .mobile als Erweiterung... Die könnt ich nachreichen. Die Umlaute sind eh noch nicht verbreitet, aber die hinzuzufügen wäre denk ich auch nicht schlecht.

    Wait for V 1.20 ;)

    Wir haben das bisher noch auseinandergehalten, bis es etwas unübersichtlicher wird. Wir finden beide, dass es anfangs so komfortabler ist.


    Kommentare kommen auch noch, obwohl eigentlich das Beispiel oben reichen sollt. Die Kommis machen es DANN wieder unübersichtlich, aber mal sehn ;)

    Spacey
     
  8. fas
    fas Hardware-Wissenschaftler
    Registriert seit:
    24. Juli 2007
    Beiträge:
    497
    Zustimmungen:
    4
    1. SysProfile:
    32074
    2. SysProfile:
    36546
    Zitat:
    Dafür gibt es doch mto, mit Array-use
    Wir haben diese Funktionen extra auch klar noch einmal getrennt, um den "User" nicht zu verunsichern.

    Ich weiss nicht, was es da zu verunsichern gibt.
    Wenn der User nur eine Mail schicken will, dann gibt er eine Adresse ein.
    Wenn er mehrere schicken will, überigbt er ein Array.
    Und ein simpler Kommentar à la "1 Emailadresse oder mehrere Adressen im Array" würde alles klar stellen.
    Ich mein, musst du selber wissen, ist dein Script, aber ich finde es überflüssig.


    Zitat:
    CC hat ja seinen Grund, nicht nur bei dem Script. CC bedeutet Carbon Copy, so viel wie "Durchschlag", z.B. wenn jemand das nur "nebenbei" bekommen soll. Ich z.B. filtere zu Haus auch meine Mails nach An und CC.. Wenn ich nur einen "Durchschlag" bekomme und kein Hauptempfänger sind, weiß ich z.B., dass ich mich nicht sofort um diese Mail kümmern muss.

    So ein Käse.
    Ich weiss, was CC bedeutet.
    Trotzdem bleibt unklar, ob, wenn ich als CC "hanz@hanz.hanz" angebe und die Mail an 5000 Leute schicke, ob bei jedem der 5000 Mails nochmal der CC "hanz@hanz.hanz" drinsteht.
    Wie du deine Mails sortierst ist natürlich deine Sachen, drum habe ich ja gesagt, dass es ok ist. Nur bleibt eben dem, der sich nicht ins Innenleben der Klasse verirren, sondern Sie nur anwenden möchte, wie erwähnt, unklar, ob der CC dann in diesem Beispiel 5000 mal die Mail erhält.


    Zitat:
    Das kann man aus jedem Pfad nehmen. Der Pfad wird nicht explizit vorher deklariert sondern direkt vom "User" angegeben, relativ zum Aufruf-Pfad des Hauptscripts, dass die Class included.

    Das habe ich auch gesehen.
    Weiss der User aber doch nicht.


    Zitat:Zitat von fas
    6.: Es wird nirgens beschrieben, wie die Variabeln einzusetzen sind ({var XY}).
    Zitat:
    Ok, das reichen wir nach ;D


    Wenn du/ihr das nachgereicht habt, können wir ja über Punkt 4, 5 und 7 nochmal sprechen.
    Weil so macht das mit dem Template und den Variabeln keinen Sinn.
    Als User frage ich mich: Was sind die Variabeln? Was ist das Template? Wer bindet was ein? Muss ich als der, der die Klasse in ein System/eine Website einbindet, Variabeln vergeben? oder macht das der User.
    Und nochmal zum versenden des leeren Templates: Wenn einer keinen Text eingibt und versehentlich auf OK klickt, wird eben nur das leere Template versendet. Eine Fehlermeldung von wegen "kein Text eingegeben" wäre sinniger.

    zur Emailprüfung:
    Zitat:
    Die ist eigentlich standard. Gut, es gibt noch .mobile als Erweiterung... Die könnt ich nachreichen. Die Umlaute sind eh noch nicht verbreitet, aber die hinzuzufügen wäre denk ich auch nicht schlecht.


    Was heisst hier Standard?
    Wo ist das Standard?
    *.mobile gibt es nicht. Du meinst sicher *.mobi, was in dem Fall funktionieren würde.
    Aber es gibt z.B. noch wie bereits erwähnt *.travel
    Und wer weiss, was für Endungen noch kommen werden?
    Berlin wollte mal *.berlin haben usw.
    Umlaute sind zwar noch nicht so verbreitet wie normale Adressen, aber das interessiert den User, der seine Umlautemailadresse eingibt und eine Fehlermeldung bekommt, reichlich wenig.
    Es ist kaum Aufwand, Umlaute und Sonderzeichen zur Prüfung hinzuzufügen.
    Und wenn du eine Funktion zum prüfen der Emailadresse hättest und das nicht nur überall hingecopy&gepastet hättest, ginge das noch viel schneller.
    Aber wenn du das eh änderst, kannst du auch gleich so eine Funktion machen. ;-)


    Zitat:Zitat von fas
    9.: Die Prüfung der Emailadressen hätte man leichter in z.B. eine Funktion ausgelagert, da so bei einer evtl.
    Änderung des Prüfstrings nur einmal alles geändert werden müsste.

    Da es aber für die FROM/TO/CC/BCC jedesmal extra kopiert wurde, muss man es im Falle einer Änderung überall
    umschreiben. Das bedeutet nicht nur einen zeitlichen Mehraufwand, sondern auch eine weitere Fehlerquelle.


    Zitat:Zitat von fas
    10.: Die Funktionen multiple_to/multiple_cc/multiple_bcc sind bis auf die Änderung TO/CC/BCC identisch.

    Einfacher wäre hier, eine Funktion multiple_X($person_to_send,$person_type), und dann einfach jeweils TO/CC/BCC
    dynamisch innerhalb der Funktion zu bestimmen, bzw. einfach die Rückgabe als TO/CC/BCC zu setzen. Spart wieder Tipparbeit & Speicher und eine Fehlerquelle mehr wird beseitigt. Außerdem ist hier wieder die gecopy&gepastete Version der Emailprüfung drin...

    Zitat:
    Wir haben das bisher noch auseinandergehalten, bis es etwas unübersichtlicher wird. Wir finden beide, dass es anfangs so komfortabler ist.

    Es ist nicht komfortabler.
    Es ist nur aufwändiger.


    Zitat:
    Kommentare kommen auch noch, obwohl eigentlich das Beispiel oben reichen sollt. Die Kommis machen es DANN wieder unübersichtlich, aber mal sehn.


    Ich kenne ja eure Vorgeschichte nicht, und weiss nicht, was ihr sonst für Prjekte verwaltet, aber glaubt mir: Kommentare machen es definitiv übersichtlich und nicht unübersichtlich.
    Vor allem, wenn es mal größer wird.
    Ich habe große Projekte, ohne Kommentare wäre ich verloren.
    Zumal es selbst bei so einem Mini-Scriptchen geschätzte 10-20 Minuten dauert, bis man sich reinließt.
    Und gerade, wenn du das ganze als OpenSource vertreiben willst, solltest du Kommentare einbauen, da sich das Andere auch anschauen werden.
    Und wenn du da jetzt 1 Jahr lang nichts mehr dran machst und dann mal wieder reinschaust, wirst du froh sein, Kommentare drin zu haben.

    Und nochmal: "Kommentare kommen noch"..... <-- Dann macht das ganze doch bitte als Version 0.0Xa und nicht als 1.1 oder was das ist.
    Wenn ihr das Ganze sonst nicht nicht veröffentlicht habt, killt diese Versionsnummer und nennt das jetzt 0.01a oder 0.02a, wenn das schon die zweite Version ist.
    Und wenn es dann fertig ist, macht ihr Version 0.3a draus.
    Und erst, wenn keine Fehler mehr auftauchen, macht ihr eine beta draus.
    Und wenn das dann eine Weile läuft macht ihr eine 0.3 rc1 draus und anschließend wird daraus dann die 0.3 final.

    Denn so wird sich keiner darüber aufregen, dass er eine Version > 1 hat, die nicht richtig funktioniert.
     
  9. fanrpg
    fanrpg Computer-Guru
    Registriert seit:
    27. Juli 2007
    Beiträge:
    161
    Zustimmungen:
    16
    1. SysProfile:
    30134
    So ist das nicht richtig.
    Es gab eine längere Beta-Phase, das enstandene Produkt war Version 1.0.0, nebenbei noch die private Versiob die nicht öffentlich zugänglich gemacht wird.. das ist mehr die Entwicklerversion (+ aller Bugs). Beta-Phasen werden mit einem geschlossenem Beta-Tester Kreis durchgeführt u.a auch in Live-Umgebungen.. wo Fehler eg. auffallen sollten. Erst wenn ein Teil soweit funktioniert das es funktionsfähig und bugfrei erscheint wird es in die öffentliche Version übernommen. Die End-Version wird dann nur noch angepasst.. da die Private-Version ein paar kleinere Features ausweist als die öffentliche und daher auch mehr Variablen.. daher auch bei der v1.2.0 musste ein Teil speziell dafür geschrieben werden. Weil es codetechnisch nicht gepasst hätte und das anpassen länger gedauert hätte als das neuschreiben. Daher auch eine Beta-Phase bei v.1.2.0 die mit Erfolg abgeschlossen werden konnte. Wie ich hier gerade bemerke wurd hier v.1.1.1 nicht veröffentlich in der ein paar der genannten Kritikpunkte verbessert wurden.

    Hier die v1.2.0
    PHP:
    <?php
    #################################################
    ##
    ##
    ##        BBCode Supporting E-Mail Class
    ##        with massmail function
    ##
    ##        Author: SynN and fanrpg (c) 2007
    ##        Date: 07/23/07
    ##
    ##        Version: 1.2.0
    ##        
    ##        Licensed under GNU Public License
    ##        http://opensource.org/licenses/gpl-license.php
    ##
    ##
    #################################################

    #################################################
    ##
    ##         History:
    ##
    ##        v1.0.0 
    ##            - First Public Release
    ##
    ##        v1.1.0
    ##            - Added template system for emails from private version
    ##        
    ##        v1.1.1
    ##            - Fixing Bug (#22)
    ##            - Fixing Bug (#23)
    ##            - Added validate_email()
    ##            - .mobile-tld allowed
    ##            - Added global message template var ( {MESSAGE} )
    ##
    ##        v1.2.0 Beta
    ##            - Fixing Bug (#24)
    ##            - Fixing Bug (#25)
    ##            - Fixing Bug (#26)
    ##            - Added archive function from private version
    ##            - Added archive to mail send function
    ##
    ##        v1.2.0 
    ##            - Fixing Bug (#27)
    ##            - Fixing Bug (#28)
    ##            - Fixing Bug (#29)
    ##            - Fixing Bug (#30)
    ##            - Fixing Bug (#31)
    ##            - Fixing Bug (#32)
    ##            - Fixing Bug (#33)
    ##            - Improve mailbb function
    ##            - Improve send_archive function
    ##             - Fixed archive to mail function (rewritten)
    ##
    #################################################

    #################################################
    ##
    ##        Example:
    ##        
    ##        $mail = new Email();
    ##
    ##        $mail->set("from", "absender@example.com");
    ##        $mail->set("to", "empfaenger@example.com"); // You can use mto to send massmail ( $mail->set("mto", array("mail@example.com", "mail2@example.com")) )
    ##        $mail->set("subject", "Betreff"); // Subject for mail
    ##        $mail->set("html", 1) // html email 1 = on, 0 = off
    ##        $mail->set("mailbb", 1) // bbcode for mails 1 = on, 0 = off
    ##        $mail->set("message", "Message of the Mail");
    ##        $mail->send();
    ##        $mail->clean();
    ##
    ##        Optional commands:
    ##
    ##        $mail->set("header", "own header"); // to set own header..
    ##        $mail->set("bcc", "bcc@example.com"); // to send a blindcopy
    ##        $mail->set("cc", "cc@example.com"); // to send a copy
    ##        $mail->set("template", "./path/filename.html"); // to set a template file
    ##        $mail->set("template_vars", array(
    ##            'NAME' => 'Value',
    ##            'NAME_VAR' => $value
    ##        )); // To set template vars.. no loops, manually message was then before template message, html is auto enabled
    ##
    ##        You can use mbcc, mcc to send mass bcc or cc, like to use mto.
    ##        You can also combine to and mto, cc and mcc, bcc and mbcc and all of them with arrays or just strings.
    ##
    #################################################

    error_reporting(E_ALL);

    class 
    Email
    {
        var 
    $from;
        var 
    $to;
        var 
    $subject;
        var 
    $headers;
        var 
    $bcc;
        var 
    $cc;
        var 
    $message;
        var 
    $mailbb;
        var 
    $mail_tpl;
        var 
    $html = false;
        var 
    $send = false;
        var 
    $archive = false;
        
        
        function 
    set($type, $value)
        {
            switch( 
    $type )
            {
                case 
    'html':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->html = true;
                    }
                    return 
    true;
                    break;
                case 
    'from':
                    if( 
    $this->validate_email( $value ) )
                    {
                        
    $this->from = $value;
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'to':
                    if( 
    $this->validate_email( $value ) )
                    {
                        
    $this->to = $value;
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'subject':
                    if( !empty(
    $value) )
                    {
                        
    $value = stripslashes($value);
                        
    $value = htmlspecialchars($value);
                        
                        
    $this->subject = $value;
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'bcc':
                    if( 
    $this->validate_email( $mail ) )
                    {
                        
    $this->bcc = $value;
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'cc':
                    if( 
    $this->validate_email( $mail ) )
                    {
                        
    $this->cc = $value;
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                case 
    'message':
                    
    $message = stripslashes($value);
                    if( 
    $this->html !== true )
                    {
                        
    $message = strip_tags($message);
                    }
                    
                    
    $this->message = $message;
                    return 
    true;
                    
                    break;    
                case 
    'mto':
                    if ( 
    is_array($value) )
                    {
                        return 
    $this->multiple_to($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->to) )
                        {
                            
    $this->to = $value;
                        }
                        else
                        {
                            
    $this->to .= ", " . $value;
                        }
                        return 
    true;
                    }
                    break;
                case 
    'mcc':
                    if ( 
    is_array($value) )
                    {
                        return 
    $this->multiple_cc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->cc) )
                        {
                            
    $this->cc = $value;
                        }
                        else
                        {
                            
    $this->cc .= ", " . $value;
                        }
                        return 
    true;
                    }
                    break;
                case 
    'mbcc':
                    if ( 
    is_array($value) )
                    {
                        return 
    $this->multiple_bcc($value);
                    }
                    else
                    {
                        if ( !isset(
    $this->bcc) )
                        {
                            
    $this->bcc = $value;
                        }
                        else
                        {
                            
    $this->bcc .= ", " . $value;
                        }
                        return 
    true;
                    }
                    break;
                case 
    'header':
                    
    $this->set_header($value);
                    break;
                case 
    'mailbb':
                    if( 
    $value == 1 or $value === true )
                    {
                        
    $this->mailbb = true;
                        return 
    true;
                    }
                    break;
                case 
    'template':
                    if( 
    file_exists($value) )
                    {
                        if( !(
    $tpl = file_get_contents($value)) )
                        {
                            if( 
    $handle = fopen($value, "r") )
                            {
                                
    $tpl = fread($handle, filesize($value));
                                
    fclose($handle);
                            }
                            else
                            {
                                return 
    false;
                            }
                        }
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                    
    $this->mail_tpl = $tpl;
                    break;
                case 
    'template_vars':
                    if( !
    is_array($value) )
                    {
                        return 
    false;
                    }
                    else
                    {
                        foreach( 
    $value as $name => $var )
                        {
                            
    $this->mail_tpl = str_replace("{var ". $name ."}", $var, $this->mail_tpl);
                        }
                        
                        
    $this->message = ( empty($this->message) ) ? $this->mail_tpl : str_replace("{MESSAGE}", $this->message, $this->mail_rpl);
                        return 
    $this->set("html", 1);
                    }
                    break;
                case 
    'archive':
                    if( 
    $value == true or $value == 1 )
                    {
                        
    $this->archive = true;
                        return 
    true;
                    }
                    break;
                case 
    'send_archive':
                    if( !empty(
    $value) )
                    {
                        return 
    $this->send_archive( $value );
                    }
                    else
                    {
                        return 
    false;
                    }
                    break;
                default:
                    return 
    false;
            }
        }
        
        function 
    multiple_to( $to )
        {
            if( !
    is_array($to) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $to as $mail )
                    {
                        if( 
    $this->validate_email( $mail ) )
                        {
                            if ( empty(
    $this->to) )
                            {
                                
    $this->to = $mail;
                            }
                            else
                            {
                                
    $this->to .= ", " . $mail;
                            }

                        }
                    }
                    return 
    true;
                }
            }    
        }
        
        function 
    multiple_cc( $cc )
        {
            if( !
    is_array($cc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $cc as $mail )
                    {
                        if( 
    $this->validate_email( $mail ) )
                        {
                            if ( empty(
    $this->cc) )
                            {
                                
    $this->cc = $mail;
                            }
                            else
                            {
                                
    $this->cc .= ", " . $mail;
                            }
                        }
                    }
                    return 
    true;
                }
            }    
        }
        
        function 
    multiple_bcc( $bcc )
        {
            if( !
    is_array($bcc) )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->send !== true )
                {
                    foreach ( 
    $bcc as $mail )
                    {
                        if( 
    $this->validate_email( $mail ) )
                        {
                            if ( empty(
    $this->bcc) )
                            {
                                
    $this->bcc = $mail;
                            }
                            else
                            {
                                
    $this->bcc .= ", " . $mail;
                            }
                        }
                    }
                }
            }    
        }
        
        function 
    set_header( $header )
        {
            
    $headers = $this->headers;
            
            
    $headers = preg_replace("#\r\n\r\n$#", "\r\n", $headers);
            
            
    $headers .= $header . "\r\n";
            
            
    $this->headers = $headers;
            
            return 
    true;
        }
        
        function 
    mailbb( $message )
        {        
            
    $search = array(            
                
    '#\[b\](.*?)\[/b\]#is',
                
    '#\[i\](.*?)\[/i\]#is',
                
    '#\[u\](.*?)\[/u\]#is',        
                
    '#\[center\](.*?)\[/center\]#is',
                
    '#\[url=(.*?)\](.*?)\[/url\]#is',
                
    '#\[url\](.*?)\[/url\]#is',
                
    '#\[color=(.*?)\](.*?)\[/color\]#is',
                
    '#\[img=(.*?)\](.*?)\[/img\]#is',
                
    '#\[img\](.*?)\[/img\]#i'
            
    );
            
            
    $replace = array(
                
    '<strong>\1</strong>',
                
    '<i>\1</i>',
                
    '<u>\1</u>',        
                
    '<div style="width:100%; text-align:center;">\1</div>',
                
    '<a href="\1">\2</a>',
                
    '<a href="\1">\1</a>',
                
    '<span style="color:\1;">\2</span>',
                
    '<img src="\1" alt="\2" border="0" />',
                
    '<img src="\1" alt="Image" border="0" />'
            
    );
            
            
    $message = preg_replace($search, $replace, $message);
            
            
    $message = '<html>
            <head>
            <title>'
    . $this->subject .'</title>
            </head>
            <body>' 
    . str_replace("\n", "\n<br />\n", $message) .'</body>
            </html>'
    ;
            
            return 
    $message;
        }
        
        function 
    send()
        {
            if( 
    is_array($this->to) )
            {
                foreach(
    $this->to as $mail)
                {
                    
    $to .= $mail .", ";
                }
                
    $this->to = $to;
            }
            
            
    $this->set("header", "From: " . $this->from);
            
    $this->set("header", "To: " . $this->to);
            
            if ( !empty(
    $this->cc) && isset($this->cc) )
            {
                
    $this->set("header", "CC: " . $this->cc);
            }
            
            if ( !empty(
    $this->bcc) && isset($this->bcc) )
            {
                
    $this->set("header", "BCC: " . $this->bcc);
            }
            
            
    $this->set("header", "X-Powered-By: fanrpg, SynN");
            
    $this->set("header", "X-Mailer: PHP/". phpversion());
            
    $this->set("header", "Return-Path: ". $this->from);
            
            if( 
    $this->mailbb === true && $this->html !== true )
            {
                
    $this->message = strip_tags($this->message);                
            }
            
            if( 
    $this->mailbb === true )
            {
                
    $this->message = $this->mailbb($this->message);
            }
            
            if( 
    $this->mailbb === true or $this->html == true )
            {
                
    $this->set("header", "Content-Type: text/html");
                
    $this->set("header", "Content-Transfer-Encoding: 8bit");    
            }
            
            if( !
    mail($this->to, $this->subject, $this->message, $this->headers . "\r\n") )
            {
                return 
    false;
            }
            else
            {
                if( 
    $this->archive == true )
                {
                    
    $file = "To: ". $this->to . "\n";
                    
    $file .= "From: " . $this->from . "\n";
                    if( !empty(
    $this->cc) )
                    {
                        
    $file .= "CC: ". $this->cc . "\n";
                    }
                    if( !empty(
    $this->bcc) )
                    {
                        
    $file .= "BCC: ". $this->bcc . "\n";
                    }
                    if( 
    $this->mailbb === true )
                    {
                        
    $file .= "MailBB: true\n";
                    }
                    if( 
    $this->html === true )
                    {
                        
    $file .= "HTML: true\n";
                    }
                    
    $file .= "Subject: ". $this->subject . "\n";
                    
    $file .= "<< end mail header\n\n";
                    
    $file .= "Message:\n";
                    
    $file .= $this->message."\n";
                    
    $file .= "<< end message\n\n";
                    
                    if( 
    $handle = fopen("archive/".date('d-m-Y', time()) . 'email_archive' . date("His", time()). ".txt", "w") )
                    {
                        if( !
    fwrite($handle, $file) )
                        {
                            return 
    false;
                        }
                        
    fclose($handle);
                    }
                    else
                    {
                        return 
    false;
                    }
                }
                                
                
    $this->send = true;
                return 
    true;
            }
        }
        
        function 
    send_archive( $file )
        {
            if( 
    file_exists($file) )
            {
                
    $value = file($file);
                
                foreach(
    $value as $line => $content)
                {
                    
    $mail_pattern = "(([a-z0-9äöü_-]+(\.[a-z0-9äöü_-]+)*@([0-9a-zäöü][0-9a-zäöü-]*[0-9a-zäöü]\.)+([a-z]{2,4}|museum|mobile)))";
                    if( 
    preg_match("#^To: $mail_pattern#i", $content, $to) )
                    {
                        
    $this->set("to", trim($to[1]));
                    }
                    
                    if( 
    preg_match("#^From: $mail_pattern#i", $content, $from) )
                    {
                        
    $this->set("from", trim($from[1]));
                    }
                    
                    if( 
    stristr($content, "Subject:") )
                    {
                        
    $this->set("subject", trim(str_replace("Subject:", "", $content)));
                    }    
                    
                    if( 
    preg_match("#^CC: $mail_pattern#i", $content, $cc) )
                    {
                        
    $this->set("cc", trim($cc[1]));
                    }    
                                
                    if( 
    preg_match("#^BCC: $mail_pattern#i", $content, $bcc) )
                    {
                        
    $this->set("bcc", trim($bcc[1]));
                    }
                            
                    if( 
    preg_match("#^MailBB: true#i", $content) )
                    {
                        
    $this->set("mailbb", true);
                    }
                    
                    if( 
    preg_match("#^HTML: true#i", $content) )
                    {
                        
    $this->set("html", true);
                    }
                    
                    if( 
    stristr($content, "<<< end mail header") )
                    {
                        break;
                    }
                }
                
                
    $value = file_get_contents($file);
                
                if( 
    preg_match("#Message:(.*?)<< end message#is", $value, $message) )
                {
                    if( 
    preg_match("#<body>(.*?)</body>#is", $message[1], $message_html) )
                    {
                        
    $this->set("message", trim($message_html[1]));
                    }
                    else
                    {
                        
    $this->set("message", trim($message[1]));
                    }
                }
                else
                {
                    return 
    false;
                }
                
                return 
    true;
            }
            else
            {
                return 
    false;
            }
        }                    
        
        function 
    validate_email( $mail )
        {
            if( 
    preg_match("/[a-z0-9äöü_-]+(\.[a-z0-9äöü_-]+)*@([0-9a-zäöü][0-9a-zäöü-]*[0-9a-zäöü]\.)+([a-z]{2,4}|museum|mobile)/i", $mail) )
            {
                return 
    true;
            }
            else
            {
                return 
    false;
            }
        }
        
        function 
    clean()
        {
            
    $this->to = "";
            
    $this->from = "";
            
    $this->subject = "";
            
    $this->headers = "";
            
    $this->message = "";
            
    $this->bcc = "";
            
    $this->cc = "";
            
    $this->mail_tpl = "";
            
    $this->send = false;
            
    $this->html = false;
            
    $this->archive = false;
            
            return 
    true;
        }
    }
    ?>
    Später wird noch ein DL-Paket folgen, in dem erklärt wird wie genau welche Funktionen wie genutzt werden können.
     
    #9 fanrpg, 7. August 2007
    Zuletzt bearbeitet: 9. August 2007
  10. Just_a_Script
    Just_a_Script reporting for duty
    Registriert seit:
    12. Februar 2007
    Beiträge:
    6.527
    Zustimmungen:
    279
    Name:
    Sascha
    1. SysProfile:
    25020
    2. SysProfile:
    70843
    Steam-ID:
    SysPKiller
    ma ne blöde frage von nem noob in der hinsicht ? was kann ich damit machen
    un wo kann ich den code verwenden un wie ? etc ... hab da echt kp von :D
     
    #10 Just_a_Script, 8. Oktober 2007
  11. fas
    fas Hardware-Wissenschaftler
    Registriert seit:
    24. Juli 2007
    Beiträge:
    497
    Zustimmungen:
    4
    1. SysProfile:
    32074
    2. SysProfile:
    36546
    ist nen phpmailer. Kann z.B. in HTML included werden sofern der server php installiert hat. Ist im normalfall aber standard. Dann können z.B. browserbasiert mails versendet werden.
     
    #11 fas, 8. Oktober 2007
    Zuletzt bearbeitet: 8. Oktober 2007
  12. Just_a_Script
    Just_a_Script reporting for duty
    Registriert seit:
    12. Februar 2007
    Beiträge:
    6.527
    Zustimmungen:
    279
    Name:
    Sascha
    1. SysProfile:
    25020
    2. SysProfile:
    70843
    Steam-ID:
    SysPKiller

    aso danke für info ;-)
     
    #12 Just_a_Script, 8. Oktober 2007
Thema:

[UPDATE 26.7.07] PHP Mailerclass mit Massenmailfunktion und MailBB-Code

Die Seite wird geladen...

[UPDATE 26.7.07] PHP Mailerclass mit Massenmailfunktion und MailBB-Code - Similar Threads - UPDATE PHP Mailerclass

Forum Datum

Bluesky: Update auf Version 1.136 bringt iPad-Unterstützung als Beta

Bluesky: Update auf Version 1.136 bringt iPad-Unterstützung als Beta: Bluesky: Update auf Version 1.136 bringt iPad-Unterstützung als Beta Mit dem Update auf Version 1.136 landet eine Neuerung auf den Geräten, nach der viele (wobei, so viele sind ja generell nicht...
User-Neuigkeiten Gestern um 22:32 Uhr

〖Referral Update〗 AttaPoll Promo Code [OZRDV or UYZOF] – 15% Off Latest Deals

〖Referral Update〗 AttaPoll Promo Code [OZRDV or UYZOF] – 15% Off Latest Deals: Looking for the latest coupon code 2026? is a survey app that allows eligible users to earn rewards by completing online surveys. If you are searching for an referral code, promo code, signup...
SysProfile-Vorstellung Gestern um 22:13 Uhr

Cyberpunk 2077: Überraschendes Update mit neuen Inhalten zu „Edgerunners 2“

Cyberpunk 2077: Überraschendes Update mit neuen Inhalten zu „Edgerunners 2“: Cyberpunk 2077: Überraschendes Update mit neuen Inhalten zu „Edgerunners 2“ Nach einem katastrophalen Launch, insbesondere auf PlayStation 4 und Xbox One, hat sich der Titel deutlich gemausert....
User-Neuigkeiten Gestern um 18:02 Uhr

FRITZ!Box 7530 AX: Update auf FRITZ!OS 8.50 steht bereit (auch für kompatible 1&1-HomeServer)

FRITZ!Box 7530 AX: Update auf FRITZ!OS 8.50 steht bereit (auch für kompatible 1&1-HomeServer): FRITZ!Box 7530 AX: Update auf FRITZ!OS 8.50 steht bereit (auch für kompatible 1&1-HomeServer) Ab sofort steht das finale Update auf FRITZ!OS 8.50 auch für die FRITZ!Box 7530 AX zum Download...
User-Neuigkeiten Gestern um 15:42 Uhr

Vorssaint 3.4.2: Update bringt neue Dynamic-Island-Optionen und Verbesserungen

Vorssaint 3.4.2: Update bringt neue Dynamic-Island-Optionen und Verbesserungen: Vorssaint 3.4.2: Update bringt neue Dynamic-Island-Optionen und Verbesserungen Die Entwickler haben an vielen Ecken nachgebessert, darunter bei der Dynamic Island selbst, der Zwischenablage, dem...
User-Neuigkeiten Gestern um 14:42 Uhr

tado°: App-Updates bringen Live Activities, Schimmelindex und KI-Fenstererkennung

tado°: App-Updates bringen Live Activities, Schimmelindex und KI-Fenstererkennung: tado°: App-Updates bringen Live Activities, Schimmelindex und KI-Fenstererkennung Mit an Bord sind unter anderem Apple Live Activities für den Heizungs-Boost, ein neuer Schimmelindex für einzelne...
User-Neuigkeiten Gestern um 11:22 Uhr

KeePassXC 2.8.0: Großes Update bringt Qt 6, Remote-Sync und neue Plattform-Funktionen

KeePassXC 2.8.0: Großes Update bringt Qt 6, Remote-Sync und neue Plattform-Funktionen: KeePassXC 2.8.0: Großes Update bringt Qt 6, Remote-Sync und neue Plattform-Funktionen Die Entwickler haben ein umfangreiches Paket geschnürt, das neben einem technischen Versionssprung bei der...
User-Neuigkeiten Mittwoch um 22:02 Uhr

PHP: Kritische Sicherheitslücken ermöglichen Code-Ausführung, Updates für alle Versionen...

PHP: Kritische Sicherheitslücken ermöglichen Code-Ausführung, Updates für alle Versionen...: PHP: Kritische Sicherheitslücken ermöglichen Code-Ausführung, Updates für alle Versionen veröffentlicht Wer PHP auf seinen Servern betreibt, sollte zeitnah aktiv werden: In den Versionen PHP...
User-Neuigkeiten Mittwoch um 21:02 Uhr

⟪Bonus Update⟫ AttaPoll Promo Code [OZRDV or UYZOF] – 30% Off Referral Benefits

⟪Bonus Update⟫ AttaPoll Promo Code [OZRDV or UYZOF] – 30% Off Referral Benefits: Looking for the latest AttaPoll coupon code 2026? AttaPoll is a survey app that allows eligible users to earn rewards by completing online surveys. If you are searching for an AttaPoll referral...
System-Zusammenstellungen Mittwoch um 20:02 Uhr

〖Current Update〗 AttaPoll Coupon Code [OZRDV or UYZOF] – 50% Off Referral Offers

〖Current Update〗 AttaPoll Coupon Code [OZRDV or UYZOF] – 50% Off Referral Offers: Looking for the latest AttaPoll coupon code 2026? AttaPoll is a survey app that allows eligible users to earn rewards by completing online surveys. If you are searching for an AttaPoll referral...
Arbeitsspeicher Mittwoch um 19:53 Uhr

Microsoft OneDrive: Großes Update bringt neue Copilot-Funktionen, Hero Links und höheres...

Microsoft OneDrive: Großes Update bringt neue Copilot-Funktionen, Hero Links und höheres...: Microsoft OneDrive: Großes Update bringt neue Copilot-Funktionen, Hero Links und höheres Sync-Limit Neben neuen Copilot-Fähigkeiten bei der Dateiverwaltung stehen vor allem ein vereinfachtes...
User-Neuigkeiten Mittwoch um 19:52 Uhr

〖Promo Update〗 AttaPoll Referral Code [OZRDV or UYZOF] – 25% Off Signup Rewards

〖Promo Update〗 AttaPoll Referral Code [OZRDV or UYZOF] – 25% Off Signup Rewards: Looking for the latest AttaPoll coupon code 2026? AttaPoll is a survey app that allows eligible users to earn rewards by completing online surveys. If you are searching for an AttaPoll referral...
Windows 8 Mittwoch um 19:39 Uhr

CentOS 5 Server 64bit PHP Update

CentOS 5 Server 64bit PHP Update: Hi, ich möchte auf einem Server ein Update von PHP 5.1.6 auf 5.2.4 oder die aktuelle Version machen, damit ich auf dem Server die neuesten Versionen von Joomla! und Wordpress nutzen kann....
Linux 15. August 2011
[UPDATE 26.7.07] PHP Mailerclass mit Massenmailfunktion und MailBB-Code solved
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden