发送html、附件、文本文件、html图片的类_PHP
程序员文章站
2022-04-07 15:00:34
...
上传文件email.php、emailclass.php到同一目录下
并在此目录下建一子目录temp,权限设为0777,执行email.php即可发送邮件。
本emailclass.php功能已相当完全。
1.可以发送普通文本;
2.可以发送HTML文本;
3.可以同时发送文本和附件;
4.可以同时发送HTML和附件;
5.可以在发送HTML时在HTML中包含图片一起发送(类中有此功能,但需自行设计发送PHP程序);
6.可以发送给多个人,EMAIL以","分开;
7.可以有抄送人、转发人、也可为多个,以","分开;
如有问题请与William联系:
william.cn@163.com
/*******************************************************************************
emailclass.php
Name: Email
Description: This class is used for sending emails.
These emails can be
Plain Text, HTML, or Both. Other uses include file
Attachments and email Templates(from a file).
Testing:
test_email.php3:
$mail->setTo("myEmail@yo.com");
$mail->send();
Changelog:
Date Name Description
----------- ----------- ------------------------------------------------
10/21/1999 R.Chambers created
*******************************************************************************/
/*******************************************************************************
Issues:
no error reporting
can only send HTML with TEXT
can only send attachements with HTML and TEXT
*******************************************************************************/
/*******************************************************************************
Function Listing:
setTo($inAddress)
setCC($inAddress)
setBCC($inAddress)
setFrom($inAddress)
setSubject($inSubject)
setText($inText)
setHTML($inHTML)
setAttachments($inAttachments)
checkEmail($inAddress)
loadTemplate($inFileLocation,$inHash,$inFormat)
getRandomBoundary($offset)
getContentType()
formatTextHeader()
formatHTMLHeader()
formatAttachmentHeader($inFileLocation)
send()
*******************************************************************************/
class Email
{
//---Global Variables
var $mailTo = ""; // array of To addresses
var $mailCC = ""; // copied recipients
var $mailBCC = ""; // hidden recipients
var $mailFrom = ""; // from address
var $mailSubject = ""; // email subject
var $mailText = ""; // plain text message
var $mailHTML = ""; // html message
var $mailImg = ""; //images of html file
var $mailAttachments = ""; // array of attachments
/*******************************************************************************
Function: setTo($inAddress)
Description: sets the email To address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setTo($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailTo = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setCC($inAddress)
Description: sets the email cc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setCC($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailCC = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setBCC($inAddress)
Description: sets the email bcc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setBCC($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailBCC = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setFrom($inAddress)
Description: sets the email FROM address
Arguments: $inAddress as string (takes single email address)
Returns: true if set
*******************************************************************************/
function setFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom = $inAddress;
return true;
}
return false;
}
/*******************************************************************************
Function: setSubject($inSubject)
Description: sets the email subject
Arguments: $inSubject as string
Returns: true if set
*******************************************************************************/
function setSubject($inSubject){
if(strlen(trim($inSubject)) > 0){
$this->mailSubject = ereg_replace( "n", "",$inSubject);
return true;
}
return false;
}
/*******************************************************************************
Function: setText($inText)
Description: sets the email text
Arguments: $inText as string
Returns: true if set
*******************************************************************************/
function setText($inText){
if(strlen(trim($inText)) > 0){
$this->mailText = $inText;
return true;
}
return false;
}
/*******************************************************************************
Function: setHTML($inHTML)
Description: sets the email HMTL
Arguments: $inHTML as string
Returns: true if set
*******************************************************************************/
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML;
return true;
}
return false;
}
/*******************************************************************************
Function: setHtmlImages($images)
Description: stores the Images string
Arguments: $images as string with directory included
separate multiple values with comma
Returns: true if stored
*******************************************************************************/
function setHtmlImages($images){
if(strlen(trim($images)) > 0){
$this->mailImg = $images;
return true;
}
return false;
}
/*******************************************************************************
Function: setAttachments($inAttachments)
Description: stores the Attachment string
Arguments: $inAttachments as string with directory included
separate multiple values with comma
Returns: true if stored
*******************************************************************************/
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments;
return true;
}
return false;
}
/*******************************************************************************
Function: checkEmail($inAddress)
Description: checks for valid email
Arguments: $inAddress as string
Returns: true if valid
*******************************************************************************/
function checkEmail($inAddress){
return (ereg("^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));
}
/*******************************************************************************
Function: loadTemplate($inFileLocation,$inHash,$inFormat)
Description: reads in a template file and replaces hash values
Arguments: $inFileLocation as string with relative directory
$inHash as Hash with populated values
$inFormat as string either "text" or "html"
Returns: true if loaded
*******************************************************************************/
function loadTemplate($inFileLocation,$inHash,$inFormat){
/*
template files have lines such as:
Dear ~!UserName~,
Your address is ~!UserAddress~
*/
//--specify template delimeters
$templateDelim = "~";
$templateNameStart = "!";
//--set out string
$templateLineOut = "";
//--open template file
if($templateFile = fopen($inFileLocation, "r")){
//--loop through file, line by line
while(!feof($templateFile)){
//--get 1000 chars or (line break internal to fgets)
$templateLine = fgets($templateFile,1000);
//--split line into array of hashNames and regular sentences
$templateLineArray = explode($templateDelim,$templateLine);
//--loop through array
for( $i=0; $icount($templateLineArray);$i++){
//--look for $templateNameStart at position 0
if(strcspn($templateLineArray[$i],$templateNameStart)==0){
//--get hashName after $templateNameStart
$hashName = substr($templateLineArray[$i],1);
//--replace hashName with acual value in $inHash
//--(string) casts all values as "strings"
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);
}
}
//--output array as string and add to out string
$templateLineOut .= implode($templateLineArray, "");
}
//--close file
fclose($templateFile);
//--set Mail body to proper format
if( strtoupper($inFormat)== "TEXT" ) return($this->setText($templateLineOut));
else if( strtoupper($inFormat)== "HTML" ) return($this->setHTML($templateLineOut));
}
return false;
}
/*******************************************************************************
Function: getRandomBoundary($offset)
Description: returns a random boundary
Arguments: $offset as integer - used for multiple calls
Returns: string
*******************************************************************************/
function getRandomBoundary($offset = 0){
//--seed random number generator
srand(time()+$offset);
//--return md5 32 bits plus 4 dashes to make 38 chars
return ( "----".(md5(rand())));
}
/*******************************************************************************
Function: getContentType($inFileName)
Description: returns content type for the file type
Arguments: $inFileName as file name string (can include path)
Returns: string
*******************************************************************************/
function getContentType($inFileName){
//--strip path
$inFileName = basename($inFileName);
//--check for no extension
if(strrchr($inFileName, ".") == false){
return "application/octet-stream";
}
//--get extension and check cases
$extension = strrchr($inFileName, ".");
switch($extension){
case ".gif": return "image/gif";
case ".gz": return "application/x-gzip";
case ".htm": return "text/html";
case ".php": return "text/html";
case ".shtml": return "text/html";
case ".html": return "text/html";
case ".jpg": return "image/jpeg";
case ".tar": return "application/x-tar";
case ".txt": return "text/plain";
case ".zip": return "application/zip";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
/*******************************************************************************
Function: formatTextHeader
Description: returns a formated header for text
Arguments: none
Returns: string
*******************************************************************************/
function formatTextHeader(){
$outTextHeader = "";
$outTextHeader .= "Content-Type: text/plain; charset=gb2312n";
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn";
$outTextHeader .= $this->mailText. "n";
return $outTextHeader;
}
/*******************************************************************************
Function: formatHTMLHeader
Description: returns a formated header for HTML
Arguments: none
Returns: string
*******************************************************************************/
function formatHTMLHeader(){
$outHTMLHeader = "";
$outHTMLHeader .= "Content-Type: text/html; charset=gb2312n";
/* $outHTMLHeader .= "Content-Type: text/html; charset=us-asciin"; */
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";
$outHTMLHeader .= $this->mailHTML. "n";
return $outHTMLHeader;
}
/*******************************************************************************
Function: formatImgHeader($inFileLocation)
Description: returns a formated header for an Img
Arguments: $inFileLocation as string with relative directory
Returns: string
*******************************************************************************/
function formatImgHeader($inFileLocation){
$outImgHeader = "";
//--get content type based on file extension
$contentType = $this->getContentType($inFileLocation);
//--format header
$outImgHeader .= "Content-Type: ".$contentType. ";n";
$outImgHeader .= ' name="'.basename($inFileLocation). '"'. "n";
$outImgHeader .= "Content-Transfer-Encoding: base64 n";
$outImgHeader .= "Content-ID:.basename($inFileLocation).">nn";
exec( "uuencode -m $inFileLocation nothing_out",$returnArray);
//--add each line returned
for ($i=1;$i(count($returnArray));$i++){
$outImgHeader .= $returnArray[$i]. "n";
}
$outImgHeader .= "n";
return $outImgHeader;
}
/*******************************************************************************
Function: formatAttachmentHeader($inFileLocation)
Description: returns a formated header for an Attachment
Arguments: $inFileLocation as string with relative directory
Returns: string
并在此目录下建一子目录temp,权限设为0777,执行email.php即可发送邮件。
本emailclass.php功能已相当完全。
1.可以发送普通文本;
2.可以发送HTML文本;
3.可以同时发送文本和附件;
4.可以同时发送HTML和附件;
5.可以在发送HTML时在HTML中包含图片一起发送(类中有此功能,但需自行设计发送PHP程序);
6.可以发送给多个人,EMAIL以","分开;
7.可以有抄送人、转发人、也可为多个,以","分开;
如有问题请与William联系:
william.cn@163.com
/*******************************************************************************
emailclass.php
Name: Email
Description: This class is used for sending emails.
These emails can be
Plain Text, HTML, or Both. Other uses include file
Attachments and email Templates(from a file).
Testing:
test_email.php3:
$mail->setTo("myEmail@yo.com");
$mail->send();
Changelog:
Date Name Description
----------- ----------- ------------------------------------------------
10/21/1999 R.Chambers created
*******************************************************************************/
/*******************************************************************************
Issues:
no error reporting
can only send HTML with TEXT
can only send attachements with HTML and TEXT
*******************************************************************************/
/*******************************************************************************
Function Listing:
setTo($inAddress)
setCC($inAddress)
setBCC($inAddress)
setFrom($inAddress)
setSubject($inSubject)
setText($inText)
setHTML($inHTML)
setAttachments($inAttachments)
checkEmail($inAddress)
loadTemplate($inFileLocation,$inHash,$inFormat)
getRandomBoundary($offset)
getContentType()
formatTextHeader()
formatHTMLHeader()
formatAttachmentHeader($inFileLocation)
send()
*******************************************************************************/
class Email
{
//---Global Variables
var $mailTo = ""; // array of To addresses
var $mailCC = ""; // copied recipients
var $mailBCC = ""; // hidden recipients
var $mailFrom = ""; // from address
var $mailSubject = ""; // email subject
var $mailText = ""; // plain text message
var $mailHTML = ""; // html message
var $mailImg = ""; //images of html file
var $mailAttachments = ""; // array of attachments
/*******************************************************************************
Function: setTo($inAddress)
Description: sets the email To address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setTo($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailTo = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setCC($inAddress)
Description: sets the email cc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setCC($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailCC = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setBCC($inAddress)
Description: sets the email bcc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setBCC($inAddress){
//--split addresses at commas
$addressArray = explode( ",",$inAddress);
//--loop through each address and exit on error
for($i=0;$icount($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailBCC = implode($addressArray, ",");
return true;
}
/*******************************************************************************
Function: setFrom($inAddress)
Description: sets the email FROM address
Arguments: $inAddress as string (takes single email address)
Returns: true if set
*******************************************************************************/
function setFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom = $inAddress;
return true;
}
return false;
}
/*******************************************************************************
Function: setSubject($inSubject)
Description: sets the email subject
Arguments: $inSubject as string
Returns: true if set
*******************************************************************************/
function setSubject($inSubject){
if(strlen(trim($inSubject)) > 0){
$this->mailSubject = ereg_replace( "n", "",$inSubject);
return true;
}
return false;
}
/*******************************************************************************
Function: setText($inText)
Description: sets the email text
Arguments: $inText as string
Returns: true if set
*******************************************************************************/
function setText($inText){
if(strlen(trim($inText)) > 0){
$this->mailText = $inText;
return true;
}
return false;
}
/*******************************************************************************
Function: setHTML($inHTML)
Description: sets the email HMTL
Arguments: $inHTML as string
Returns: true if set
*******************************************************************************/
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML;
return true;
}
return false;
}
/*******************************************************************************
Function: setHtmlImages($images)
Description: stores the Images string
Arguments: $images as string with directory included
separate multiple values with comma
Returns: true if stored
*******************************************************************************/
function setHtmlImages($images){
if(strlen(trim($images)) > 0){
$this->mailImg = $images;
return true;
}
return false;
}
/*******************************************************************************
Function: setAttachments($inAttachments)
Description: stores the Attachment string
Arguments: $inAttachments as string with directory included
separate multiple values with comma
Returns: true if stored
*******************************************************************************/
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments;
return true;
}
return false;
}
/*******************************************************************************
Function: checkEmail($inAddress)
Description: checks for valid email
Arguments: $inAddress as string
Returns: true if valid
*******************************************************************************/
function checkEmail($inAddress){
return (ereg("^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));
}
/*******************************************************************************
Function: loadTemplate($inFileLocation,$inHash,$inFormat)
Description: reads in a template file and replaces hash values
Arguments: $inFileLocation as string with relative directory
$inHash as Hash with populated values
$inFormat as string either "text" or "html"
Returns: true if loaded
*******************************************************************************/
function loadTemplate($inFileLocation,$inHash,$inFormat){
/*
template files have lines such as:
Dear ~!UserName~,
Your address is ~!UserAddress~
*/
//--specify template delimeters
$templateDelim = "~";
$templateNameStart = "!";
//--set out string
$templateLineOut = "";
//--open template file
if($templateFile = fopen($inFileLocation, "r")){
//--loop through file, line by line
while(!feof($templateFile)){
//--get 1000 chars or (line break internal to fgets)
$templateLine = fgets($templateFile,1000);
//--split line into array of hashNames and regular sentences
$templateLineArray = explode($templateDelim,$templateLine);
//--loop through array
for( $i=0; $icount($templateLineArray);$i++){
//--look for $templateNameStart at position 0
if(strcspn($templateLineArray[$i],$templateNameStart)==0){
//--get hashName after $templateNameStart
$hashName = substr($templateLineArray[$i],1);
//--replace hashName with acual value in $inHash
//--(string) casts all values as "strings"
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);
}
}
//--output array as string and add to out string
$templateLineOut .= implode($templateLineArray, "");
}
//--close file
fclose($templateFile);
//--set Mail body to proper format
if( strtoupper($inFormat)== "TEXT" ) return($this->setText($templateLineOut));
else if( strtoupper($inFormat)== "HTML" ) return($this->setHTML($templateLineOut));
}
return false;
}
/*******************************************************************************
Function: getRandomBoundary($offset)
Description: returns a random boundary
Arguments: $offset as integer - used for multiple calls
Returns: string
*******************************************************************************/
function getRandomBoundary($offset = 0){
//--seed random number generator
srand(time()+$offset);
//--return md5 32 bits plus 4 dashes to make 38 chars
return ( "----".(md5(rand())));
}
/*******************************************************************************
Function: getContentType($inFileName)
Description: returns content type for the file type
Arguments: $inFileName as file name string (can include path)
Returns: string
*******************************************************************************/
function getContentType($inFileName){
//--strip path
$inFileName = basename($inFileName);
//--check for no extension
if(strrchr($inFileName, ".") == false){
return "application/octet-stream";
}
//--get extension and check cases
$extension = strrchr($inFileName, ".");
switch($extension){
case ".gif": return "image/gif";
case ".gz": return "application/x-gzip";
case ".htm": return "text/html";
case ".php": return "text/html";
case ".shtml": return "text/html";
case ".html": return "text/html";
case ".jpg": return "image/jpeg";
case ".tar": return "application/x-tar";
case ".txt": return "text/plain";
case ".zip": return "application/zip";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
/*******************************************************************************
Function: formatTextHeader
Description: returns a formated header for text
Arguments: none
Returns: string
*******************************************************************************/
function formatTextHeader(){
$outTextHeader = "";
$outTextHeader .= "Content-Type: text/plain; charset=gb2312n";
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn";
$outTextHeader .= $this->mailText. "n";
return $outTextHeader;
}
/*******************************************************************************
Function: formatHTMLHeader
Description: returns a formated header for HTML
Arguments: none
Returns: string
*******************************************************************************/
function formatHTMLHeader(){
$outHTMLHeader = "";
$outHTMLHeader .= "Content-Type: text/html; charset=gb2312n";
/* $outHTMLHeader .= "Content-Type: text/html; charset=us-asciin"; */
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";
$outHTMLHeader .= $this->mailHTML. "n";
return $outHTMLHeader;
}
/*******************************************************************************
Function: formatImgHeader($inFileLocation)
Description: returns a formated header for an Img
Arguments: $inFileLocation as string with relative directory
Returns: string
*******************************************************************************/
function formatImgHeader($inFileLocation){
$outImgHeader = "";
//--get content type based on file extension
$contentType = $this->getContentType($inFileLocation);
//--format header
$outImgHeader .= "Content-Type: ".$contentType. ";n";
$outImgHeader .= ' name="'.basename($inFileLocation). '"'. "n";
$outImgHeader .= "Content-Transfer-Encoding: base64 n";
$outImgHeader .= "Content-ID:.basename($inFileLocation).">nn";
exec( "uuencode -m $inFileLocation nothing_out",$returnArray);
//--add each line returned
for ($i=1;$i(count($returnArray));$i++){
$outImgHeader .= $returnArray[$i]. "n";
}
$outImgHeader .= "n";
return $outImgHeader;
}
/*******************************************************************************
Function: formatAttachmentHeader($inFileLocation)
Description: returns a formated header for an Attachment
Arguments: $inFileLocation as string with relative directory
Returns: string