> I have had no success sending multipart/alternative emails with php. I have
> tried everyone's various code snippets with no luck. I test the results with
> Outlook and Outlook Express. Everytime my boundary tag ends up showing as
> part of my message and thus the plain text and html portions show up as one
> long blob of unformatted text. Below is the code I am currently using. Any
> suggestions would be greatly appreciated.
> 
> Thanks,
> 
> Dan
> 
> The code:
> 
> <?php 
> error_reporting(E_ALL);
> //FUNCTION future
> multipartmailer($to,$from,$subject,$plaintextsource,$htmlsource);
> //$boundry="**=-=-=D-=-=-=-MIME-A-Boundry-=-=-N=-=-=-**";
> $boundry= "---=".uniqid("MAILDIVIDERS");
> //set mime type 
> 
> $headers="From: Person <[EMAIL PROTECTED]>\n";
> $headers.= "MIME-Version: 1.0\n";
> $headers.="Content-Type: multipart/alternative;
> boundary=\"$boundry\"\n";
> //these files have the raw message content
> $plaintext = file("plaintextcontent.txt");
> $html = file("htmlcontent.txt");
> //warning for non-MIME lovin' clients
> 
> $headers .= "This message is in MIME format. Since your mail reader does not
> understand this format, some or all of this message may not be
> legible.\n\r\n\r";
> 
> // CHOP 
> $message .= $boundry."\n";
> $message .= "Content-Type: text/plain; charset=ISO-8859-1\n";
> $message .= "Content-Transfer-Encoding: 8bit\n\r";
> foreach($plaintext as $line) {
>     $message .=$line;
> } 
> $message .="\n".$boundry."\n";
> $message .= "Content-Type: text/html; charset=ISO-8859-1\n";
> $message .= "Content-Transfer-Encoding: 8bit\n";
> foreach($html as $line) {
>     $message .=$line;
> } 
> $message .="\n".$boundry."\n";
> mail("[EMAIL PROTECTED]","Welcome to the Website",$message,$headers);
> print $headers."".$message."<br>";
> 
> ?> 
> </body> 
> </html

I also had a very hard time sending HTML-formatted email as multipart.
Following are some code samples from what eventually worked for me. I think
you can have lots of variations in the headers without problems, and that
your main problem is how you're using the boundary. VERY IMPORTANT: Note how
I'm adding "--" before the boundary when it's used to separate things, and
how the last use of the boundary is followed by another "--".

// define a boundary strings to use in multipart email
$OB = "----=_OuterBoundary_000";

// set multipart/alternative headers
$multiheaders = "From: $from_name<$from_email>\n";
if ($reply_to_email != "") {
        $multiheaders .= "Reply-To: " . $reply_to_name . "<" .
$reply_to_email . ">\n";
}
$multiheaders .= "Return-Path: <$from_email>\n";
$multiheaders .= "X-Mailer: PHP4\n";
$multiheaders .= "MIME-Version: 1.0\n";
$multiheaders .= "Content-Type: multipart/alternative;\n\tboundary=\"" . $OB
. "\"\n\n";
$multiheaders .= "--" . $OB . "\n";
$multiheaders .= "Content-Type: text/plain; charset=us-ascii\n";
$multiheaders .= "Content-Transfer-Encoding: 7bit\n";
$multiheaders .= "Content-Disposition: inline\n\n";

My code samples are all chopped up because they're part of a queuing system.
I create a plain text message and an HTML-formatted message and write
everything to a MySQL database. A separate script that's called by a crontab
actually sends the email. (That let's me control frequency and volume.)
After pulling from the database, I build the multipart message from the
plain text message, the boundary, some more specific headers, the
HTML-formatted message.

// build multipart/alternative
$multipart_message = $message . "\n\n--" . $boundary . "\n" .
"Content-Type: text/html; charset=us-ascii" . "\n" . "Content-Disposition:
inline" . "\n\n" .
html_entity_decode($html_message) . "\n\n--" . $boundary .
"--\n\n--End--\n\n\n";
if ([EMAIL PROTECTED]("$fullname<$email>", $subject, $multipart_message,
$multiheaders)) {
    // some stuff for error checking
}

Hopefully you can decipher my example.

--
Lowell Allen



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to