Thread: Mail Class
View Single Post
Old 02-02-2008, 10:46 AM   #1 (permalink)
Daniel
The Wanderer
 
Join Date: Jan 2008
Location: Nottingham
Posts: 7
Thanks: 1
Daniel is on a distinguished road
Default Mail Class

PHP Code:
<?php

/**
 * Danltn | http://danltn.com/
 * No warranty is given to code used
 * Under creative commons license:
 * http://creativecommons.org/licenses/by-nc-sa/2.0/uk/
 * Attribution-Non-Commercial-Share Alike 2.0 UK: England & Wales
 */

/* For testing purposes */
error_reporting(E_ALL);

class 
email
{
    private 
$to;
    private 
$from;
    private 
$cc;
    private 
$bcc;
    private 
$subject;
    private 
$raw_headers = array();
    private 
$headers;
    private 
$message;

    public function 
__construct($short false$to ''$from ''$cc ''$bcc ''$subject ''$message ''$headers '')
    {
        if (
$short)
        {
            
$this->to($to);
            
$this->from($from);
            
$this->cc($cc);
            
$this->bcc($bcc);
            
$this->subject($subject);
            
$this->message($message);
            
$this->header($header);
        }
    }

    public function 
reset($what 'all')
    {
        
$what strtolower($what);
        switch (
$what)
        {
            case 
'to':
                
$this->to null;
                break;

            case 
'cc':
                
$this->cc null;
                break;
                
            case 
'bcc':
                
$this->bcc null;
                break;
                
            case 
'from':
                
$this->from null;
                break;
                
            case 
'message':
                
$this->message null;
                break;

            case 
'subject':
                
$this->subject null;
                break;

            case 
'headers':
                
$this->headers null;
                break;

            case 
'raw_headers':
                
$this->raw_headers = array();
                break;

            case 
'all headers':
                
$this->raw_headers = array();
                
$this->headers null;
                break;

            default:
                
$this->to null;
                
$this->from null;
                
$this->cc null;
                
$this->bcc null;
                
$this->subject null;
                
$this->message null;
                
$this->raw_headers = array();
                
$this->headers null;
        }
        return 
$this;
    }

    public function 
to($to '')
    {
        if (!
$to)
        {
            return 
$this;
        }
        if (
is_array($to))
        {
            
$to implode(', '$to);
        }
        
$to str_replace("\n"''$to);
        
$to trim($to);
        
$this->to $to;
        return 
$this;
    }

    public function 
from($from '')
    {
        if (!
$from)
        {
            return 
$this;
        }
        if (
is_array($from))
        {
            
$from implode(', '$from);
        }
        
$from trim($from);
        
$this->header($from'from');
        
$this->from $from;
        return 
$this;
    }

    public function 
cc($cc '')
    {
        if (!
$cc)
        {
            return 
$this;
        }
        if (
is_array($cc))
        {
            
$cc implode(', '$cc);
        }
        
$cc trim($cc);
        
$this->cc $cc;
        return 
$this;
    }

    public function 
bcc($bcc '')
    {
        if (!
$bcc)
        {
            return 
$this;
        }
        if (
is_array($bcc))
        {
            
$bcc implode(', '$bcc);
        }
        
$this->bcc $bcc;
        return 
$this;
    }

    public function 
subject($subject ''$force70 1)
    {
        
/* Some things choke if the subject is more than 70 chars. */
        
if (!$subject)
        {
            return 
$this;
        }
        if (
$force70 == false)
        {
            
$subject substr($subject070);
        }
        
$subject str_replace("\n"' '$subject);
        
$this->subject $subject;
        return 
$this;
    }

    public function 
message($message ''$wordwrap 0$htmlspecialchars 0)
    {
        if (!
$message)
        {
            return 
$this;
        }
        if (
$wordwrap)
        {
            
$message wordwrap($message70"\n");
        }
        if (
$htmlspecialchars)
        {
            
$message htmlspecialchars($message);
        }
        
$this->message $message;
        return 
$this;
    }

    private function 
ss($text)
    {
        if (
get_magic_quotes_gpc())
        {
            return 
stripslashes($text);
        }
        else
        {
            return 
$text;
        }
    }

    public function 
html_mail($ar true)
    {
        if (
$ar)
        {
            
$this->header('MIME-Version: 1.0'false);
            
$this->header('Content-type: text/html; charset=iso-8859-1'false);
        }
        else
        {

            foreach (
$this->raw_headers as & $header)
            {
                if (
$header == 'MIME-Version: 1.0' or $header == 'Content-type: text/html; charset=iso-8859-1')
                {
                    unset(
$header);
                }
            }

        }
        return 
$this;
    }

    public function 
header($header ''$special false)
    {
        if (!
$header)
        {
            return 
$this;
        }
        if(
is_array($header))
        {
            foreach(
$header as $h)
            {
                
$this->header($hfalsefalse);
            }
            return 
$this;
        }
        if (
$special == true)
        {
            
$special str_replace(' '''str_replace('-'' 'strtolower($special)));
            switch (
$special)
            {
                case 
'from':
                    
$this->header("From: $header"false);
                    break;

                case 
'reply to':
                    
$this->header("Reply-To: $header"false);
                    break;

                case 
'bcc':
                    
$this->header("Bcc: $header"false);
                    break;

                case 
'cc':
                    
$this->header("Cc: $header"false);
                    break;

                case 
'x mailer':
                    
$this->header("X-Mailer: $header"false);
                    break;
            }
        }
        else
        {    
            
$header str_replace("\n"''$header);
            
$this->raw_headers[] = $header;
            return 
$this;
        }
    }

    private function 
gen_header()
    {
        if (!
$this->raw_headers)
        {
            return 
$this;
        }
        else
        {
            
$this->headers '';
            if (!
defined('CRLF'))
            {
                
define('CRLF'" \r\n");
            }
            foreach (
$this->raw_headers as $header)
            {
                
$this->headers .= $header CRLF;
            }
        }
        return 
$this;
    }

    public function 
send()
    {
        
$this->gen_header();
        
$s mail($this->to$this->subject$this->message$this->headers);
        if (
$s)
        {
            
/* This was just here for testing, you can remove it if need be. */
            
echo "Mail successfully sent to {$this->to}.";
            return 
true;
        }
        else
        {
            return 
false;
        }
    }
}

?>
PHP 5 only.
Suggested usage via Method Chaining:
PHP Code:
<?php

$mail 
= new email;

$mail->html_mail()->to('daniel.neville@gmail.com')->subject('Hello')->message('Hello there <b>Daniel Neville</b>. How are you?')->from('daniel@neville.tk')->header(array("Blah: Hello""There: You are"))->send();

$mail->reset();

$mail->to('daniel.neville@gmail.com')->subject('Hello')->message('Hello there <b>Daniel Neville</b>. This should not be bold')->from('daniel@neville.tk')->send();

?>
http://danltn.com/bin/o0q.phps

Constructive critiscism and feedback are more than welcome. :hehe:

I'd love to know your opinions, so please tell me them!

Reply back if you need any help.



Dan
Send a message via MSN to Daniel
Daniel is offline  
Reply With Quote
The Following 2 Users Say Thank You to Daniel For This Useful Post:
Alan @ CIT (02-09-2008), ETbyrne (07-04-2008)