| 
       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()函数就可以用了,示例代码如下: 
	
	- <?php 
 
	-  
 
	- $headers = "MIME-Version: 1.0" . "rn"; 
 
	- $headers .= "Content-type:text/html; charset=utf-8"; 
 
	- mail($to,$subject,$message,$headers); 
 
	- ?> 
 
	 
 
上面函数不可以带附件了,下面我们升级一下,代码如下: 
	
	- <?php 
 
	- 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; 
 
	- } 
 
	-  
 
	-  
 
	-  
 
	-  
 
	- 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 .= 'Message-ID: <'.$this->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]; 
 
	- } 
 
	-  
 
	-  
 
	-  
 
	-  
 
	- 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; 
 
	- } 
 
	- } 
 
	-  
 
	-  
 
	-  
 
	- 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(emptyempty($this->attach)&&emptyempty($this->cc)){ 
 
	- $this->outputCommonHeader(); 
 
	- return $this->mailSimple(); 
 
	- }else if(emptyempty($this->attach)){ 
 
	- $this->outputCommonHeader(); 
 
	- return $this->mailWithCC(); 
 
	- }else if(emptyempty($this->cc)){ 
 
	- $this->outputCommonHeader(); 
 
	- $this->getBoundary();  
 
	- return $this->mailWithAttach(); 
 
	- }else if(!emptyempty($this->toaddr)&&!emptyempty($this->topic)&&!emptyempty($this->cc)&&!emptyempty($this->content)&&!emptyempty($this->attach)){ 
 
	- $this->outputCommonHeader(); 
 
	- $this->getBoundary();  
 
	- return $this->mailAll(); 
 
	- } 
 
	- } 
 
	- } 
 
	 
 
示例代码,有些变量需要上下文环境,代码如下: 
	
	- $m = new Mail(); 
 
	- $m->setToaddr($this->temp['receipt_address']); 
 
	- $m->setTopic($this->temp['mail_title']); 
 
	- $m->setContent($this->temp['mail_content']); 
 
	- $m->setFromaddr($_SESSION['user']['name'].' <'.$_SESSION['user']['name'].'@'.SystemDomain.'>'); 
 
	- $m->setDomain('@'.SystemDomain); 
 
	- $m->setCc($this->temp['cc_address']); 
 
	- $m->setAttach(PATH.'/temp/'.$this->temp['attachment_file']); 
 
	- $m->send(); 
 
	 
 
优点:使用方便就一个简单的函数 
缺点:需要php.ini支持该函数,如果某些服务器不支持而又不能改环境那就不行了而且总是不稳定,发的有时能收到有时不能. 
      
      (责任编辑:admin) |