- Impact
- 16
Hey,
I was looking around for ages trying to get this damn thing working with thunderbird. Basically it sends an email using multipart/alternative which, if the email client supports MIME lets it decide whether to show the email in plain text or HTML.
Any comments or suggestions just lemme know here
EDIT:
Updated: Plain and HTML versions can now be defined in the $email_html and $email_plain variables
UPDATED 17/02: USE THIS VERSION! This is much more compatible with different mail services, see notes at top of code for more info
Rep or $NP Appreciated As Always :hehe:
I was looking around for ages trying to get this damn thing working with thunderbird. Basically it sends an email using multipart/alternative which, if the email client supports MIME lets it decide whether to show the email in plain text or HTML.
PHP:
<?php
/*
Sam Cleaver aka Beaver6813 (http://www.beaver6813.com)
Mutlipart Email Script, Sends In Both Plain And HTML For Compatibility
Which Works With MIME 1.0+ Supporting Software.
Email: samcleaver.beaver[-at]gmail[-dot]com
Copyright (C) 2007 Beaver6813
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*
Created By Beaver6813, a special thanks to Jonathan at The PHP Solution
for all your help along the way.
CHANGES:
-- Is Now Compatible With GMail
-- Encrypts Messages In Base64 For Easier Transportation
NOTES:
-- From experience with different mail services i've discovered some key pointers
when sending html or any type of email:
* DO NOT link to external CSS stylesheets, most of the time these are either filtered out
or do not load properly
* As discovered in GMail it strips out any stylesheets completely, even inline ones so you're
going to have to use the style='' tags on any div's etc you want to make look pretty
* Bear in mind linking to any external resources will bring up a warning on the clients
end and they can choose to or not to load external resources.
* Keep HTML resources as simple as possible, most of the time they aren't loaded as well as
they would in firefox and so can be really mucked up if you do some complicated magic with
them.
COMING SOON:
-- Will be turned into a class making it easier to send emails :)
*/
$_emailer_subject = "My First Email Yay!"; //The subject of the email... duh
$_emailer_to = "[email protected]"; //You can make this even easier for the
//email client by specifying the actual name of the person as well, but for
//simplicities sake we'll just give the email
$_emailer_from = "test@localhost"; //Again, you can do to this what
//i said above
$_emailer_reply_to = "test@localhost";
$_emailer_cc = ''; //Optional
$_emailer_bcc = '';//Optional
//Okay what do you want to appear if it displays the plain text version?
$email_html = "<h1>HTML E-mail</h1>
<p>This is an <b>HTML</b> e-mail.</p>";
//Okay what do you want to appear if it displays the HTML version?
$email_plain = "HTML E-mail\n\nThis is the text portion of an HTML e-mail\n";
$_emailer_subject = $_emailer_subject == '' ? 'No Subject' : $_emailer_subject; // Must have a subject
$_emailer_cc = substr( $_emailer_cc , 0 , -2 ); // Remove the trailing ", "
$_emailer_bcc = substr( $_emailer_bcc , 0 , -2 );
$_emailer_reply_to = $_emailer_reply_to == '' ? $_emailer_from : $_emailer_reply_to;
$mid = md5( uniqid( time() ) ); // Generate a unique id for the email
$host = str_replace( 'www' , '' , $_SERVER['HTTP_HOST'] ); // Remove the www for an "email address"
$_emailer_cc_do = $_emailer_cc != '' ? "Cc: $_emailer_cc\n" : '';
$_emailer_bcc_do = $_emailer_bcc != '' ? "Bcc: $_emailer_bcc\n" : '';
# Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}
//add From: header
$headers = "From: $_emailer_from$eol";
//specify MIME version 1.0
$headers .= "MIME-Version: 1.0$eol";
$headers .= "Return-Path: $_emailer_reply_to$eol";
$headers .= "$_emailer_cc_do$eol";
$headers .= "$_emailer_bcc_do$eol";
$headers .= "Message-ID: <$mid@$host>$eol";
$headers .= "X-Priority: 3$eol";
$headers .= "X-MSMail-Priority: Normal$eol";
$headers .= "X-Mailer: PHP$eol";
$headers .= "X-MimeOLE: Generated By Beaver6813s MultiPart Mail Script$eol";
$headers .= "Date: " . gmdate('D, d M Y H:i:s Z' , time() ) . $eol;
//unique boundary this can be whatever you want... but try and make it imaginative :)
$boundary = uniqid("BEAVER6813");
//tell e-mail client this e-mail contains//alternate versions
$headers .= "Content-Type: multipart/alternative; boundary = $boundary\r\n\r\n";
//plain text version of message
$body = "--$boundary$eol" .
"Content-Type: text/plain; charset=ISO-8859-1$eol" .
"Content-Transfer-Encoding: base64$eol$eol";
$body .= chunk_split(base64_encode("$email_plain")).$eol.$eol; ;
//HTML version of message
$body .= "--$boundary\r\n" .
"Content-Type: text/html; charset=ISO-8859-1$eol" .
"Content-Transfer-Encoding: base64$eol$eol";
$body .= chunk_split(base64_encode("$email_html")).$eol.$eol;
# Finished
$body .= "--".$boundary."--".$eol.$eol; // finish with two eol's for better security.
//send message
$result = mail($_emailer_to, $_emailer_subject, $body, $headers);
if($result) {
echo "MAIL SENT SUCCESSFULLY. YOU'RE A WINNER!";
} else {
echo "SOME WEIRD ERROR :S. YOU LOSE";
}
?>
EDIT:
Updated: Plain and HTML versions can now be defined in the $email_html and $email_plain variables
UPDATED 17/02: USE THIS VERSION! This is much more compatible with different mail services, see notes at top of code for more info
Rep or $NP Appreciated As Always :hehe:
Last edited:












