note 77405 added to ref.mail
| From: | nielsvandenberge at hotmail dot com | Date: | Tue, 28 Aug 2007 15:15:11 +0000 |
| Subject: | note 77405 added to ref.mail | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-129855@lists.php.net to get a copy of this message | ||
I updated the function with help of some comments on this page and some research on the internet and
this is the final result.
I tested it with MS Outlook, MS Outlook Express, Mozilla Thunderbird, Yahoo webmail, Hotmail, MS
Exchange Webaccess and Horde (text-version) and they all gave the desired output with and without
attachments.
Spamassassin also accepts this form of sending e-mails, when you use a clean e-mailaddress and body.
<?php
function send_mail($to, $body, $subject, $fromaddress, $fromname, $attachments=false)
{
$eol="\r\n";
$mime_boundary=md5(time());
# Common Headers
$headers .= "From: ".$fromname."<".$fromaddress.">".$eol;
$headers .= "Reply-To: ".$fromname."<".$fromaddress.">".$eol;
$headers .= "Return-Path:
".$fromname."<".$fromaddress.">".$eol; // these two to set reply
address
$headers .= "Message-ID: <".time()."-".$fromaddress.">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid
spam-filters
# Boundry for marking the split & Multitype Headers
$headers .= 'MIME-Version: 1.0'.$eol.$eol;
$headers .= "Content-Type: multipart/mixed;
boundary=\"".$mime_boundary."\"".$eol.$eol;
# Open the first part of the mail
$msg = "--".$mime_boundary.$eol;
$htmlalt_mime_boundary = $mime_boundary."_htmlalt"; //we must define a different MIME
boundary for this section
# Setup for text OR html -
$msg .= "Content-Type: multipart/alternative;
boundary=\"".$htmlalt_mime_boundary."\"".$eol.$eol;
# Text Version
$msg .= "--".$htmlalt_mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$msg .= strip_tags(str_replace("<br>", "\n", substr($body,
(strpos($body, "<body>")+6)))).$eol.$eol;
# HTML Version
$msg .= "--".$htmlalt_mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$msg .= $body.$eol.$eol;
//close the html/plain text alternate portion
$msg .= "--".$htmlalt_mime_boundary."--".$eol.$eol;
if ($attachments !== false)
{
for($i=0; $i < count($attachments); $i++)
{
if (is_file($attachments[$i]["file"]))
{
# File for Attachment
$file_name = substr($attachments[$i]["file"],
(strrpos($attachments[$i]["file"], "/")+1));
$handle=fopen($attachments[$i]["file"], 'rb');
$f_contents=fread($handle, filesize($attachments[$i]["file"]));
$f_contents=chunk_split(base64_encode($f_contents)); //Encode The Data For Transition
using base64_encode();
$f_type=filetype($attachments[$i]["file"]);
fclose($handle);
# Attachment
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: ".$attachments[$i]["content_type"].";
name=\"".$file_name."\"".$eol; // sometimes i have to send MS Word, use
'msword' instead of 'pdf'
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Description: ".$file_name.$eol;
$msg .= "Content-Disposition: attachment;
filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of
lines !! IMPORTANT !!
$msg .= $f_contents.$eol.$eol;
}
}
}
# Finished
$msg .= "--".$mime_boundary."--".$eol.$eol; // finish with two eol's for
better security. see Injection.
# SEND THE EMAIL
ini_set(sendmail_from,$fromaddress); // the INI lines are to force the From Address to be used !
$mail_sent = mail($to, $subject, $msg, $headers);
ini_restore(sendmail_from);
return $mail_sent;
}
?>
----
Server IP: 83.137.20.107
Probable Submitter: 82.204.37.70
----
Manual Page -- http://www.php.net/manual/en/ref.mail.php
Edit -- https://master.php.net/note/edit/77405
Del: integrated -- https://master.php.net/note/delete/77405/integrated
Del: useless -- https://master.php.net/note/delete/77405/useless
Del: bad code -- https://master.php.net/note/delete/77405/bad+code
Del: spam -- https://master.php.net/note/delete/77405/spam
Del: non-english -- https://master.php.net/note/delete/77405/non-english
Del: in docs -- https://master.php.net/note/delete/77405/in+docs
Del: other reasons-- https://master.php.net/note/delete/77405
Reject -- https://master.php.net/note/reject/77405
Search -- https://master.php.net/manage/user-notes.php