NameSilo

Mail Class

Namecheap AuctionsNamecheap Auctions
SpaceshipSpaceship
SpaceshipSpaceship
Watch

Daniel

Danltn.comVIP Member
Impact
133
PHP:
<?php

/**
 * Danltn | [url]http://danltn.com/[/url]
 * No warranty is given to code used
 * Under creative commons license:
 * [url]http://creativecommons.org/licenses/by-nc-sa/2.0/uk/[/url]
 * 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($subject, 0, 70);
        }
        $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($message, 70, "\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($h, false, false);
            }
            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:
<?php

$mail = new email;

$mail->html_mail()->to('[email protected]')->subject('Hello')->message('Hello there <b>A Name Goes Here</b>. How are you?')->from('[email protected]')->header(array("Blah: Hello", "There: You are"))->send();

$mail->reset();

$mail->to('[email protected]')->subject('Hello')->message('Hello there <b>Daniel Neville</b>. This should not be bold')->from('[email protected]')->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.

:tu:

Dan :xf.love:
 
Last edited:
0
•••
The views expressed on this page by users and staff are their own, not those of NamePros.
GoDaddyGoDaddy
Appraise.net

We're social

Escrow.com
Spaceship
Escrowly
CryptoExchange.com
Domain Recover

NamePros updates

New in Parking: updated way to act on many domains or inquiries at once
Your domain list and inquiry list now have a bar above and below the list. Check the items you want, then choose an action in the bar...
AIVikings
Catchy
  • The sidebar remains visible by scrolling at a speed relative to the page’s height.
Back