note 92429 deleted from function.mail by danbrown
| From: | danbrown@php.net | Date: | Thu, 23 Jul 2009 19:11:35 +0000 |
| Subject: | note 92429 deleted from function.mail by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-158663@lists.php.net to get a copy of this message | ||
Note Submitter: john dot howard at prismmg dot com
----
Simple function to send mail (text or html) optionally with attachments.
<?php
function send_mail($to, $from, $subject, $message, $html = false, $attachments = null)
{
if (empty($to)) return(false);
if (empty($from)) return(false);
$headers .= "To: $to\r\n";
$headers .= "From: $from\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$xHeader = "Content-type: text/plain; charset=\"iso-8859-1\"\r\n";
if ($html) { // interpret $message as html
$xHeader = "Content-type: text/html; charset=\"iso-8859-1\"\r\n";
}
if (!is_null($attachments)) { // attachment list delimited w/";"
$boundary = md5(mt_rand());
$files = explode(';', $attachments);
foreach($files as $file) {
$file = trim($file);
if (!($data = file_get_contents($file))) continue; // file cannot be opened: skip this
attachment
$data = chunk_split(base64_encode($data), 68, "\n"); // convert to base64 chunks
$contentType = get_mime_type($file); // retreive MIME type from file
extension
$fname = basename($file); // strip path from filename
$xAttach .= "--$boundary\n";
$xAttach .= "Content-Type: $contentType; name=\"$fname\"\n";
$xAttach .= "Content-Transfer-Encoding: base64\n";
$xAttach .= "Content-Disposition: attachment; filename=\"$fname\"\n\n";
$xAttach .= "$data\n";
}
if (!empty($xAttach)) { // there is at least one valid attachment
$xMessage .= "--$boundary\n";
$xMessage .= $xHeader; // Content-Type: text/plain or text/html depending on $html flag
$xMessage .= "Content-Transfer-Encoding: 7bit\n\n";
$xMessage .= "$message\n\n";
$xMessage .= $xAttach;
$xMessage .= "--$boundary--\n\n";
$message = $xMessage;
$xHeader = "Content-Type: multipart/mixed; boundary=\"$boundary\"";
}
}
$headers .= $xHeader;
$status = mail($to, $subject, $message, $headers);
return($status);
}
?>
Notes:
[1] Parameters:
$html: =true: interpret message as html
=false: interpret message as plain text [default]
$attachments: list of files to attach, delimited with ";"
[2] Returns false if:
- $to address not provided
- $from address not provided
otherwise returns status from mail() function.
[3] Any attachments which cannot be opened are skipped.
[4] Uses get_mime_type function to set content-type of attachment(s) based on filename extension
(see user notes under "mime_content_type"). An alternative is to use mime_content_type
function itself, but this fn is not enabled by default in PHP (an issue w/shared hosting). Plus
mime_content_type is deprecated. Another options is to use fileinfo functions (see
"fileinfo" topic), but these are not enabled either in PHP < 5.3.0.
[5] Examples of use:
send_mail($to, $from, $subject, $message); // same as using mail.
send_mail($to, $from, $subject, $message, TRUE); // interprets $message as html
send_mail($to, $from, $subject, $message, FALSE, "../myDir/myAttachment.pdf"); //
sends text message with attachment (note relative path)
send_mail($to, $from, $subject, $message, TRUE, "att1.txt; att2.pdf; att3.jpeg"); //
sends $message as html mail with 3 attachments