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

本文探讨了在PHP中使用mail函数发送邮件时遇到的乱码问题,重点介绍了如何通过正确设置headers来确保跨平台收件人接收的邮件无乱码。此外,作者提供了一个自定义邮件类,支持HTML邮件、抄送和附件,适用于多种场景并附有示例代码和配置说明。
摘要由CSDN通过智能技术生成

mail函数,发送邮件

语法: mail(to,subject,message,headers,parameters)

to 规定邮件的接收者

subject 规定邮件的主题。该参数不能包含任何换行字符

message 规定要发送的消息

headers 规定额外的报头,比如 From, Cc 以及 Bcc

parameters 规定 sendmail 程序的额外参数。

碰到的主要问题是乱码问题,刚开始是某些客户端接收邮件时好(比如QQ邮箱,估计带自动那个识别编码)的有些不foxmail、ipad显示乱码,解决方式正确的设置这个mail的headers就行了,下面是我使用的完美的无乱码的例子。

在PHP中配置php.ini文件过程分为两个步骤:

1.先找到你放置所有PHP,Apache,MySQL文件的地方,在PHP文件夹里你可以发现有一个文件:php.ini,打开后,找到mail function地方,将原来的配置代码改为如下(仅对windows系统):

[mail function]

; For Win32 only.

SMTP=smtp.sohu.com

mtp_port=25

; For Win32 only.

sendmail_from= 填上你的电子邮件全称。

此处为以sohu的邮件服务器设置,如果你用163的邮箱,则设置为:smtp.163.com

2.在C盘搜索php.ini,选择不是快捷方式的那一个php.ini,应该在C/WINDOWS里面的,打开它,如上面一样修改它,保存,设置完后,记得重启Apache服务器,然后mail()函数就可以用了,示例代码如下:

// 当发送 HTML 电子邮件时,请始终设置 content-type

$headers="MIME-Version: 1.0"."rn";

$headers.="Content-type:text/html; charset=utf-8";

mail($to,$subject,$message,$headers);

?>

上面函数不可以带附件了,下面我们升级一下,代码如下:

classMail {

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='';

}

publicfunctiongetFromaddr() {

return$this->fromaddr;

}

publicfunctionsetFromaddr($fromaddr) {

$this->fromaddr =$fromaddr;

}

publicfunctiongetTopic() {

return$this->topic;

}

publicfunctiongetToaddr() {

return$this->toaddr;

}

publicfunctiongetCc() {

return$this->cc;

}

publicfunctiongetContent() {

return$this->content;

}

publicfunctiongetAttach() {

return$this->attach;

}

publicfunctionsetTopic($topic) {

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

}

publicfunctionsetToaddr($toaddr) {

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

}

publicfunctionsetCc($cc) {

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

}

publicfunctionsetContent($content) {

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

}

publicfunctionsetAttach($attach) {

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

}

publicfunctiongetDomain() {

return$this->domain;

}

publicfunctionsetDomain($domain) {

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

}

/*

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

*/

privatefunctiongetEOT() {

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";

}

}

privatefunctiongetBoundary(){

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

}

privatefunctiongetUniq_id(){

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

}

privatefunctionoutputCommonHeader(){

$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;

}

privatefunctionmime_content_type ($f)

{

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

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

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

return$temp[0];

}//判断文件的mime类型

/*

* 只带有抄送

*/

privatefunctionmailWithCC(){

$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)){

return1;

}else{

return0;

}

}

/*

* $filedir需要是绝对地址

*/

privatefunctionattachmentToBase64($filedir){

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

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

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

$str=base64_encode($str);

$this->filestr =$str;

}

/*

* 只带有附件

*/

privatefunctionmailWithAttach(){

$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)){

return1;

}else{

return0;

}

}

/*

* 带有附件和抄送

*/

privatefunctionmailAll(){

$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)){

return1;

}else{

return0;

}

}

/*

* 不带抄送和附件

*/

privatefunctionmailSimple(){

$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)){

return1;

}else{

return0;

}

}

publicfunctionsend(){

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

$this->outputCommonHeader();

return$this->mailSimple();

}elseif(emptyempty($this->attach)){

$this->outputCommonHeader();

return$this->mailWithCC();

}elseif(emptyempty($this->cc)){

$this->outputCommonHeader();

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

return$this->mailWithAttach();

}elseif(!emptyempty($this->toaddr)&&!emptyempty($this->topic)&&!emptyempty($this->cc)&&!emptyempty($this->content)&&!emptyempty($this->attach)){

$this->outputCommonHeader();

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

return$this->mailAll();

}

}

}

示例代码,有些变量需要上下文环境,代码如下:

$m=newMail();

$m->setToaddr($this->temp['receipt_address']);

$m->setTopic($this->temp['mail_title']);

$m->setContent($this->temp['mail_content']);

$m->setFromaddr($_SESSION['user']['name'].' ');

$m->setDomain('@'.SystemDomain);

$m->setCc($this->temp['cc_address']);

$m->setAttach(PATH.'/temp/'.$this->temp['attachment_file']);

$m->send();

优点:使用方便就一个简单的函数

缺点:需要php.ini支持该函数,如果某些服务器不支持而又不能改环境那就不行了而且总是不稳定,发的有时能收到有时不能.

(责任编辑:admin)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值