 |
Account Login
|
 |
 |
Latest Articles
|
 |
 |
Advertisement
|
 |
 |
Associates
|
 |
 |
Associates
|
 |
|
 |
 |
|
 |
02-02-2008, 09:46 AM
|
#1 (permalink)
|
|
The Wanderer
Join Date: Jan 2008
Location: Nottingham
Posts: 7
Thanks: 1
|
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($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 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
|
|
|
|
The Following 2 Users Say Thank You to Daniel For This Useful Post:
|
|
02-02-2008, 02:40 PM
|
#2 (permalink)
|
|
The Gregarious
Join Date: Sep 2007
Posts: 549
Thanks: 15
|
Only took a quick look though, but it looks good. Unlike a lot of OOP scripts that have been posted here, it is using OOP for something it should be used for.
__________________
There are two ways to write bug-free code, only the third one works.
|
|
|
|
02-02-2008, 03:35 PM
|
#3 (permalink)
|
|
The Prestige
Join Date: Dec 2007
Location: On your Hard Drive, hiding like a Virus
Posts: 779
Thanks: 154
|
Looks simple, yet good. :D
__________________
Wax on, Wax off
|
|
|
|
02-02-2008, 05:21 PM
|
#4 (permalink)
|
|
The Acquainted
Join Date: Sep 2007
Posts: 125
Thanks: 6
|
Whats the advantage of 100+ lines of code over just doing the mail(); function?
|
|
|
02-02-2008, 06:18 PM
|
#5 (permalink)
|
|
The Wanderer
Join Date: Jan 2008
Location: Nottingham
Posts: 7
Thanks: 1
|
Quote:
Originally Posted by WinSrev
Whats the advantage of 100+ lines of code over just doing the mail(); function?
|
The simple answer is, there isn't a definitive reason to use this, other than convenience, and not having to remember how to set all the individual options each time. If you're fully comfortable with using mail(); then you might a well use it. But if you're less confident, or need a simpler option, this is it.
This will soon be expanded for attachments too.
Dan.
|
|
|
02-02-2008, 10:40 PM
|
#6 (permalink)
|
|
The Gregarious
Join Date: Sep 2007
Posts: 549
Thanks: 15
|
Quote:
Originally Posted by WinSrev
Whats the advantage of 100+ lines of code over just doing the mail(); function?
|
Security and accessibility, its easier and safer to use that function.
__________________
There are two ways to write bug-free code, only the third one works.
|
|
|
|
02-03-2008, 12:28 AM
|
#7 (permalink)
|
|
Moderateur
Join Date: Apr 2007
Posts: 651
Thanks: 2
|
A nice start, and good to see you keeping the class simple and to the point. The actual number of lines could be whittled down with some rewriting (look where you're repeating yourself).
I'm not a fan of the whole 'reset' idea. Best, in my opinion, keeping two different email messages separate from each other. I'd perhaps also throw in a static method rather than having to create at least one instance of the class with a global variable: email::instance()->to('blah...
__________________
|
|
|
|
03-24-2008, 09:16 AM
|
#8 (permalink)
|
|
The Contributor
Join Date: Sep 2007
Location: Finland
Posts: 40
Thanks: 3
|
Very nice class! Will use this.. =)
|
|
|
03-24-2008, 11:28 PM
|
#9 (permalink)
|
|
The Acquainted
Join Date: Dec 2007
Location: Lapeer, MI
Posts: 163
Thanks: 32
|
Normally I dislike it when people bump threads but I never saw this before, so thank you marxx! And thank you David for a great mail class.
|
|
|
|
05-14-2008, 10:35 AM
|
#10 (permalink)
|
|
The Addict
Join Date: Nov 2007
Location: the Netherlands
Posts: 221
Thanks: 2
|
Would be nice if you can specify your own SMTP server. Very simple to add :)
|
|
|
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
|
|
|
| Thread Tools |
|
|
| Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off | | |