一个可以发送附件及HTML格式邮件的PHP类

2016-02-19 19:25 10 1 收藏

图老师小编精心整理的一个可以发送附件及HTML格式邮件的PHP类希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - Web开发 】

  一个用Php Class写的发信程序

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  这个类里显示了发送MIME的方法,也就是HTML格式信件和附件发送的问题。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

/*
Mail: An object to encapsulate the sending of email. Allows user-specified
From: addresses, handles the encoding of attachments; conforms more or less to
MIME standards.. Uses sendmail to send the mail, mimencode to do the MIME
encoding, and zip to automatically zip attachments.
Contacting the author(s):
Brought to you by the team at Sequoia Softworks, http://www.sequoiasoft.com
Feel free to contact tony@sequoiasoft.com and tell us how you like it!
(Or to complain bitterly, report bugs, or suggest new features.)
Known shortcomings/bugs:
o guessMIMEType()only knows about a few MIME types. You can expand this as
you need.
o $mime_boundary in the Send() method should be randomly generated, but it
isn't likely to ever hurt anything in its current form
Example:
require("Mail.phtml");
$mymessage = new Mail();
$mymessage-from = "php3.script@www.somedomain.net";
$mymessage-to = "luckyuser@destination.org";
$mymessage-subject = "This is your lucky day";
$mymessage-headers["Reply-To"] = "webmaster@www.somedomain.net";
$mymessage-headers["X-Extra-Header"] = "Pointless Header v3.0";
$mymessage-body = "Doesn't it feel good to get mail?nEspecially with files
attached!n";
$mymessage-attachments[0] = "tarball.tar.gz";
$mymessage-attachments[1] = "images/smiling_countenance.gif";
$mymessage-attachments[2] = "/usr/share/reference/jargondict.html";
$mymessage-attachments[3] = "./core";
$mymessage-attachments[4] = "/etc/passwd"; //naughty naughty!!
$mymessage-ZipAttachments("your_files.zip"); //uncomment this to zip all
//the attachments into one big
//attachment.
$mymessage-Send();
*/
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
mime@docserver.cac.washington.edu 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: base64
n");
//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);
}
}

来源:https://www.tulaoshi.com/n/20160219/1620958.html

延伸阅读
标签: Web开发
?php $mymode            = FTP_ASCII; $delete            = 0; $local_dir         = "/my_local_download_directory"; $host     &nb...
标签: PHP
  我承认我不是PHP的领导者。然而,在看了一些PHP的信息之后,我认为有一些功能需要添加到其中来处理数据库连接和整合XML。要做到这一点,我想我可以创建一个处理连接MySQL和使用PHP中的domxml功能来提供XML输出的类。然后我就可以在PHP脚本的任何地方声明这个类并且在需要使用它的时候可以提供XML功能。   我假设人们使用PHP是原...
标签: PHP
       <?php   /*   如有转载,请注明作者      作者: 何志强   文件: ubb.php   备注: 说是改进,其实核心函数parse()已经完全重写了,而且思路也是不一样的。   不过仍是受何志强的例子的启发,而且测试的例子还有URLCHECK等...
标签: PHP
  一个简单的自动发送邮件系统(三)     这里介绍php和mysql结合起来实用。如何从mysql数据库中提取数据。     好,我们已经成功的完成了我们的要求,很多的数据已经存在了数据库中,现在的问题是,如何查询这些数据,得到有用的结果呢? 在下面的程序中,我们将选择"apple"的...
标签: PHP
  参考了一下网上的文章。俗话说,天下文章一大抄,看你会抄不会抄。关键是能为我所用,这是最重要的。废话不多讲,let‘s go。 其实发mail很简单,php有现成的函数,可以参考php 的 manual,特别是第四个例子,讲的很详细。 关键是怎么把上传附件跟邮件发送结合起来。关于文件的上传,可以参考http://blog.csdn.net/slamdunk3/archive...

经验教程

779

收藏

81
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部