> 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