php mail函数 附件,利用php中mail函数发送带有附件的邮件

class Mail {

private $topic;

private $toaddr;

private $fromaddr;

private $cc;

private $content;

private $attach;

private $header;

private $domain;//邮箱域

private $msg;

private $filename;

private $filemime;

private $filestr;

private $boundary;

private $uniqid;

private $eol; //每行末尾所加的换行符类型

function __construct(){

$this->getEOT();//生成结尾换行符

$this->getUniq_id();

$this->header='';

$this->attach='';

$this->cc='';

$this->msg='';

}

public function getFromaddr() {

return $this->fromaddr;

}

public function setFromaddr($fromaddr) {

$this->fromaddr = $fromaddr;

}

public function getTopic() {

return $this->topic;

}

public function getToaddr() {

return $this->toaddr;

}

public function getCc() {

return $this->cc;

}

public function getContent() {

return $this->content;

}

public function getAttach() {

return $this->attach;

}

public function setTopic($topic) {

$this->topic = mb_convert_encoding(trim($topic),'UTF-8','auto');

}

public function setToaddr($toaddr) {

$this->toaddr = trim($toaddr);

}

public function setCc($cc) {

$this->cc = trim($cc);

}

public function setContent($content) {

$this->content = mb_convert_encoding(trim($content),'UTF-8','auto');

}

public function setAttach($attach) {

$this->attach = trim($attach);

}

public function getDomain() {

return $this->domain;

}

public function setDomain($domain) {

$this->domain = $domain;//输入的值为'@domain.com'

}

/*

* 根据系统类型设置换行符

*/

private function getEOT() {

if (strtoupper ( substr ( PHP_OS, 0, 3 ) == 'WIN' )) {

$this->eol = "rn";

} elseif (strtoupper ( substr ( PHP_OS, 0, 3 ) == 'MAC' )) {

$this->eol= "r";

} else {

$this->eol = "n";

}

}

private function getBoundary(){

$this->boundary= '--'.substr(md5(time().rand(1000,2000)),0,16);

}

private function getUniq_id(){

$this->uniqid= md5(microtime().time().rand(1,100));

}

private function outputCommonHeader(){

$this->header .= 'From: '.$this->fromaddr.$this->eol;

//$this->header .= 'To: '.$this->toaddr.$this->eol;

//$this->header .= 'Subject: '.$this->topic.$this->eol;

$this->header .= 'Message-ID: uniqid.$this->domain.'>'.$this->eol;

$this->header .= 'MIME-Version: 1.0'.$this->eol;

$this->header .= 'Reply-To: '.$this->fromaddr.$this->eol;

$this->header .= 'Return-Path: '.$this->fromaddr.$this->eol;

$this->header .= 'X-Mailer: Xmail System'.$this->eol;

$this->header .= 'Content-Disposition: inline'.$this->eol;

}

private function mime_content_type ( $f )

{

$temp = trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;

$temp = preg_replace('/s+/',' ',$temp);

$temp = explode(' ',$temp);

return $temp[0];

}//判断文件的mime类型

/*

* 只带有抄送

*/

private function mailWithCC(){

$this->header .= 'Cc: '.$this->cc.$this->eol;

$this->header .= 'Content-type: text/html; charset=UTF-8'.$this->eol;

$this->header .= 'Content-Transfer-Encoding: 8bit'.$this->eol;

$this->msg = $this->content;

if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){

return 1;

}else{

return 0;

}

}

/*

* $filedir需要是绝对地址

*/

private function attachmentToBase64($filedir){

$this->filename = basename($filedir);

@$fopen = fopen($filedir,'r');

$str = fread($fopen,filesize($filedir));

$str = base64_encode($str);

$this->filestr = $str;

}

/*

* 只带有附件

*/

private function mailWithAttach(){

$this->attachmentToBase64($this->attach);

$this->header .= 'Content-type: multipart/mixed; boundary="'.str_replace('--','',$this->boundary).'"'.$this->eol;

$this->msg .= $this->eol.$this->boundary.$this->eol;

$this->msg .= 'Content-Type: text/html; charset=utf-8'.$this->eol;

$this->msg .= 'Content-Disposition: inline'.$this->eol;

$this->msg .= $this->eol.$this->content.$this->eol;

$this->msg .= $this->boundary.$this->eol;

$this->msg .= 'Content-Type: '.$this->mime_content_type($this->attach).$this->eol;

$this->msg .= 'Content-Disposition: attachment; filename="'.$this->filename.'"'.$this->eol;

$this->msg .= 'Content-Transfer-Encoding: base64'.$this->eol;

$this->msg .= $this->eol.$this->filestr.$this->eol;

$this->msg .= $this->eol.$this->boundary.'--';

if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){

return 1;

}else{

return 0;

}

}

/*

* 带有附件和抄送

*/

private function mailAll(){

$this->attachmentToBase64($this->attach);

$this->header .= 'Cc: '.$this->cc.$this->eol;

$this->header .= 'Content-type: multipart/mixed; boundary="'.str_replace('--','',$this->boundary).'"'.$this->eol;

$this->msg .= $this->eol.$this->boundary.$this->eol;

$this->msg .= 'Content-Type: text/html; charset=utf-8'.$this->eol;

$this->msg .= 'Content-Disposition: inline'.$this->eol;

$this->msg .= $this->eol.$this->content.$this->eol;

$this->msg .= $this->boundary.$this->eol;

$this->msg .= 'Content-Type: '.$this->mime_content_type($this->attach).$this->eol;

$this->msg .= 'Content-Disposition: attachment; filename="'.$this->filename.'"'.$this->eol;

$this->msg .= 'Content-Transfer-Encoding: base64'.$this->eol;

$this->msg .= $this->eol.$this->filestr.$this->eol;

$this->msg .= $this->eol.$this->boundary.'--';

if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){

return 1;

}else{

return 0;

}

}

/*

* 不带抄送和附件

*/

private function mailSimple(){

$this->header .= 'Content-type: text/html; charset=UTF-8'.$this->eol;

$this->header .= 'Content-Transfer-Encoding: 8bit'.$this->eol;

$this->msg = $this->content;

if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){

return 1;

}else{

return 0;

}

}

public function send(){

if(empty($this->attach)&&empty($this->cc)){

$this->outputCommonHeader();

return $this->mailSimple();

}else if(empty($this->attach)){

$this->outputCommonHeader();

return $this->mailWithCC();

}else if(empty($this->cc)){

$this->outputCommonHeader();

$this->getBoundary(); //有附件就生成boundary

return $this->mailWithAttach();

}else if(!empty($this->toaddr)&&!empty($this->topic)&&!empty($this->cc)&&!empty($this->content)&&!empty($this->attach)){

$this->outputCommonHeader();

$this->getBoundary(); //有附件就生成boundary

return $this->mailAll();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值