17.3.1 Problem
You want to send MIME email. For example, you want
to send multipart messages with both plain-text and HTML
portions and have MIME-aware mail readers automatically display the correct
portion.
17.3.2 Solution
require 'Mail.php';
require 'Mail/mime.php';
$to = 'adam@example.com, sklar@example.com';
$headers['From'] = 'webmaster@example.com';
$headers['Subject'] = 'New Version of PHP Released!';
// create MIME object
$mime = new Mail_mime;
// add body parts
$text = 'Text version of email';
$mime->setTXTBody($text);
$html = '<html><body>HTML version of email</body></html>';
$mime->setHTMLBody($html);
$file = '/path/to/file.png';
$mime->addAttachment($file, 'image/png');
// get MIME formatted message headers and body
$headers = $mime->headers($headers);
$body = $mime->get();
$message =& Mail::factory('mail');
$message->send($to, $headers, $body);
17.3.3 Discussion
PEAR's Mail_mime class provides an object-oriented
interface to all the behind-the-scenes details involved in creating an email
message that contains both text and HTML parts. The class is similar to PEAR's
Mail class, but instead of defining the body as a string of text, you
create a Mail_mime object and call its methods to add parts to the
body:
// create MIME object $mime = new Mail_mime; // add body parts $text = 'Text version of email'; $mime->setTXTBody($text); $html = '<html><body>HTML version of email</body></html>'; $mime->setHTMLBody($html); $file = '/path/to/file.txt'; $mime->addAttachment($file, 'text/plain'); // get MIME formatted message headers and body $headers = $mime->headers($headers); $body = $mime->get();
The Mail_mime::setTXTBody( )
and
Mail_mime::setHTMLBody( ) methods add the plaintext and HTML body
parts, respectively. Here, we pass in variables, but you can also pass a
filename for Mail_mime to read. To use this option, pass true
as the second parameter:
$text = '/path/to/email.txt'; $mime->setTXTBody($text, true);
To add an attachment to the message, such as a graphic or an
archive, call Mail_mime::addAttachment( ) :
$file = '/path/to/file.png'; $mime->addAttachment($file,'image/png');
Pass the function to the location to the file and its MIME
type.
Once the message is complete, do the final preparation and send
it out:
// get MIME formatted message headers and body
$headers = $mime->headers($headers);
$body = $mime->get( );
$message =& Mail::factory('mail');
$message->send($to, $headers, $body);