<?php
class Mail {
var $from; //The sender
var $to; //The recipient
var $subject; //The subject line
var $headers; //A hash of additional headers (headername => headervalue)
var $zipname; //The name of the file the attachments are zipped into
//($zipname == false if attachments are to be sent
//individually)
var $attachments; //An array of files to attach
var $body; //The body text of the message
//Mail constructor: initializes vars to default values. 'Nuff said.
function Mail()
{
$this->from = "";
$this->to = "";
$this->subject = "";
$this->headers = array();
$this->zipname = false;
$this->attachments = array();
$this->body = "";
}
//Auxiliary method, used to guess a file's MIME type
//based on its extension. Doesn't know about too many
//extensions right now
function guessMIMEType($filename)
{
//GUESS MIME TYPE
$filename = basename($filename);
if(strrchr($filename,".") == false) 
{
return("application/octet-stream");
}
$ext = strrchr($filename,".");
switch($ext)
 {
case ".gif":return "image/gif";break;
case ".gz":return "application/x-gzip";
case ".htm":
case ".html":return "text/html";break;
case ".jpg":return "image/jpeg";break;
case ".tar":return "application/x-tar";break;
case ".txt":return "text/plain";break;
case ".zip":return "application/zip";break;
default:return "application/octet-stream";break;
}
}
//Cute little convenience method. Supply it with a filename to
//zip attachments to, or supply it with false if attachments are
//sent individually
function ZipAttachments($name)
{
$this->zipname = $name;
}
//The workhorse method, does the actually sending of the mail.
//Doesn't check for errors so be careful!
function Send($sendmail = "sendmail") 
{
if($this->from == "")
$fp = popen($sendmail . " -i " . $this->to, "w");
else
$fp = popen($sendmail . " -i -f" . $this->from . "" . $this->to, "w");
$mime_boundary = "-1747901728-1448367683-913849620=:4553";
if($fp == false)
return false;
//Write subject header
fwrite($fp,"Subject: " . $this->subject . "n");
//Write user-defined headers
reset($this->headers);
while(list($hdrname,$hdrval) = each($this->headers))
 {
fwrite($fp,$hdrname . ": " . $hdrval . "n");
 }
//If there are attachments, this needs to be a MIME message
if(count($this->attachments) > 0) 
{
//Write MIME headers
fwrite($fp,"MIME-Version: 1.0n");
fwrite($fp,"Content-Type: multipart/mixed; BOUNDARY=". $mime_boundary . "n");
fwrite($fp,"n");
//Write dummy message body
fwrite($fp," This message is in MIME format. The first part should be readable text,n");
fwrite($fp," while the remaining parts are likely unreadable without MIME-aware tools.n");
fwrite($fp," Send mail to [email protected] for more info.n");
fwrite($fp,"n");
//Write message text
fwrite($fp,"--" . "$mime_boundary" . "n");
fwrite($fp,"Content-Type: text/plain; charset=US-ASCIIn");
fwrite($fp,"n");
fwrite($fp,$this->body);
fwrite($fp,"n");
//Handle attachments
if($this->zipname != false) 
{ //IF we've been told to
//zip the attachments
fwrite($fp,"--" . $mime_boundary . "n");
fwrite($fp,"Content-Type: application/zip; name=". $this->zipname . "n");
fwrite($fp,"Content-Transfer-Encoding: base64n");
//fwrite($fp,"Content-ID: " . $content_ID . "n");
fwrite($fp,"Content-Description:n");
fwrite($fp,"n");
$cmdline = "zip - ";
while(list($key, $attachment_name) = each($this->attachments))
$cmdline .= "$attachment_name ";
$cmdline .= "| mimencode -b";
$pp = popen($cmdline,"r");
while(!feof($pp)) 
{
$data = fread($pp,4096);
fwrite($fp,$data);
}
pclose($pp);
}
else 
{ //no need to zip the attachments, attach them
//separately
while(list($key, $attachment_name) = each($this->attachments)) 
{
fwrite($fp,"--" . $mime_boundary . "n");
fwrite($fp,"Content-Type: " . $this->guessMIMEType($attachment_name) . ";name=". basename($attachment_name) . "n");
fwrite($fp,"Content-Transfer-Encoding: base64n");
//fwrite($fp,"Content-ID: " .
//$content_ID . "n");
fwrite($fp,"Content-Description:n");
fwrite($fp,"n");
$pp = popen("mimencode -b $attachment_name","r");
while(!feof($pp)) 
{
$data = fread($pp,4096);
fwrite($fp,$data);
}
pclose($pp);
}
}
fwrite($fp,"--" . $mime_boundary . "--n");
}
//No need for a MIME message, so it's an RFC822 message
else
{
fwrite($fp,"n");
fwrite($fp,$this->body);
}
pclose($fp);
}
}
?>麻烦哪位大哥能帮小弟看看,这个类如何来使用呢?
我对发邮件可以说一窍不通
哪位大哥能帮忙写个实例化这个类并发送邮件的例子啊?

解决方案 »

  1.   

    用的着这么麻烦么,本来php就带mail()啊
      

  2.   

    require_once 'Mail.php';$headers = array(.....);$mail = new Mail();
    $mail->from = "[email protected]";
    $mail->to = "[email protected]";
    $mail->subject = "xxxxxx";
    $mail->headers = $headers;
    $mail->body = "xxxxxxx";
    $mail->Send();
      

  3.   

    这个类估计需要在本地假设邮件服务器,因为设定变量的时候没有要求你输入密码。
    你可以上网再搜一下,scoket发送邮件的类。很多都是带例子的。
    功能可以实现通过126,163,或其他邮箱发送到指定的邮件地址
      

  4.   

    部分虚拟主机上是不支持mail()函数的,所以才找了这个类
    victorhero能再帮忙写详细一点吗?
    $headers具体都是些什么东西啊?
    唉,真是烦死啦。。
      

  5.   

    一款Php开发工具 http://jinpingmeisex/PhpDeveloper/PhpDeveloper.rar
      

  6.   

    默认是用sendmail发送邮件的,windows没有sendmail
    所以..