最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 利用php中mail函数发送带有附件的邮件

    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系统):

    1. [mail function] 
    2. ; For Win32 only. 
    3. SMTP =smtp.sohu.com     
    4. mtp_port=25 
    5. ; For Win32 only. 
    6. sendmail_from = 填上你的电子邮件全称。 

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

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

    1. <?php 
    2. // 当发送 HTML 电子邮件时,请始终设置 content-type 
    3. $headers = "MIME-Version: 1.0" . "rn"
    4. $headers .= "Content-type:text/html; charset=utf-8"
    5. mail($to,$subject,$message,$headers); 
    6. ?> 

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

    1. <?php 
    2. class Mail { 
    3. private $topic
    4. private $toaddr
    5. private $fromaddr
    6. private $cc
    7. private $content
    8. private $attach
    9. private $header
    10. private $domain;//邮箱域 
    11. private $msg
    12. private $filename
    13. private $filemime
    14. private $filestr
    15. private $boundary
    16. private $uniqid
    17. private $eol//每行末尾所加的换行符类型 
    18.  
    19. function __construct(){ 
    20. $this->getEOT();//生成结尾换行符 
    21. $this->getUniq_id(); 
    22. $this->header=''
    23. $this->attach=''
    24. $this->cc=''
    25. $this->msg=''
    26.  
    27.  
    28. public function getFromaddr() { 
    29. return $this->fromaddr; 
    30. public function setFromaddr($fromaddr) { 
    31. $this->fromaddr = $fromaddr
    32. public function getTopic() { 
    33. return $this->topic; 
    34.  
    35. public function getToaddr() { 
    36. return $this->toaddr; 
    37.  
    38. public function getCc() { 
    39. return $this->cc; 
    40. public function getContent() { 
    41. return $this->content; 
    42.  
    43. public function getAttach() { 
    44. return $this->attach; 
    45.  
    46. public function setTopic($topic) { 
    47. $this->topic = mb_convert_encoding(trim($topic),'UTF-8','auto'); 
    48. public function setToaddr($toaddr) { 
    49. $this->toaddr = trim($toaddr); 
    50.  
    51. public function setCc($cc) { 
    52. $this->cc = trim($cc); 
    53.  
    54. public function setContent($content) { 
    55. $this->content = mb_convert_encoding(trim($content),'UTF-8','auto'); 
    56.  
    57. public function setAttach($attach) { 
    58. $this->attach = trim($attach); 
    59. public function getDomain() { 
    60. return $this->domain; 
    61. public function setDomain($domain) { 
    62. $this->domain = $domain;//输入的值为'@domain.com' 
    63.  
    64. /* 
    65. * 根据系统类型设置换行符 
    66. */ 
    67. private function getEOT() { 
    68. if (strtoupper ( substr ( PHP_OS, 0, 3 ) == 'WIN' )) { 
    69. $this->eol = "rn"
    70. elseif (strtoupper ( substr ( PHP_OS, 0, 3 ) == 'MAC' )) { 
    71. $this->eol= "r"
    72. else { 
    73. $this->eol = "n"
    74.  
    75. private function getBoundary(){ 
    76. $this->boundary= '–'.substr(md5(time().rand(1000,2000)),0,16); 
    77. private function getUniq_id(){ 
    78. $this->uniqid= md5(microtime().time().rand(1,100)); 
    79. private function outputCommonHeader(){ 
    80. $this->header .= 'From: '.$this->fromaddr.$this->eol; 
    81. //$this->header .= 'To: '.$this->toaddr.$this->eol; 
    82. //$this->header .= 'Subject: '.$this->topic.$this->eol; 
    83. $this->header .= 'Message-ID: <'.$this->uniqid.$this->domain.'>'.$this->eol; 
    84. $this->header .= 'MIME-Version: 1.0'.$this->eol; 
    85. $this->header .= 'Reply-To: '.$this->fromaddr.$this->eol; 
    86. $this->header .= 'Return-Path: '.$this->fromaddr.$this->eol; 
    87. $this->header .= 'X-Mailer: Xmail System'.$this->eol; 
    88. $this->header .= 'Content-Disposition: inline'.$this->eol; 
    89. private function mime_content_type ( $f )  
    90. {  
    91. $temp = trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ; 
    92. $temp = preg_replace('/s+/',' ',$temp); 
    93. $temp = explode(' ',$temp); 
    94. return $temp[0]; 
    95. }//判断文件的mime类型 
    96.  
    97. /* 
    98. * 只带有抄送 
    99. */ 
    100. private function mailWithCC(){ 
    101. $this->header .= 'Cc: '.$this->cc.$this->eol; 
    102. $this->header .= 'Content-type: text/html; charset=UTF-8'.$this->eol; 
    103. $this->header .= 'Content-Transfer-Encoding: 8bit'.$this->eol; 
    104. $this->msg = $this->content; 
    105. if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ 
    106. return 1; 
    107. }else
    108. return 0; 
    109. /* 
    110. * $filedir需要是绝对地址 
    111. */ 
    112. private function attachmentToBase64($filedir){ 
    113. $this->filename = basename($filedir); 
    114. @$fopen = fopen($filedir,'r'); 
    115. $str = fread($fopen,filesize($filedir)); 
    116. $str = base64_encode($str); 
    117. $this->filestr = $str
    118.  
    119. /* 
    120. * 只带有附件 
    121. */ 
    122. private function mailWithAttach(){ 
    123. $this->attachmentToBase64($this->attach); 
    124. $this->header .= 'Content-type: multipart/mixed; boundary="'.str_replace('–','',$this->boundary).'"'.$this->eol; 
    125. $this->msg .= $this->eol.$this->boundary.$this->eol; 
    126. $this->msg .= 'Content-Type: text/html; charset=utf-8'.$this->eol; 
    127. $this->msg .= 'Content-Disposition: inline'.$this->eol; 
    128. $this->msg .= $this->eol.$this->content.$this->eol; 
    129. $this->msg .= $this->boundary.$this->eol; 
    130. $this->msg .= 'Content-Type: '.$this->mime_content_type($this->attach).$this->eol; 
    131. $this->msg .= 'Content-Disposition: attachment; filename="'.$this->filename.'"'.$this->eol; 
    132. $this->msg .= 'Content-Transfer-Encoding: base64'.$this->eol; 
    133. $this->msg .= $this->eol.$this->filestr.$this->eol; 
    134. $this->msg .= $this->eol.$this->boundary.'–'
    135. if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ 
    136. return 1; 
    137. }else
    138. return 0; 
    139. /* 
    140. * 带有附件和抄送 
    141. */ 
    142. private function mailAll(){ 
    143. $this->attachmentToBase64($this->attach); 
    144. $this->header .= 'Cc: '.$this->cc.$this->eol; 
    145. $this->header .= 'Content-type: multipart/mixed; boundary="'.str_replace('–','',$this->boundary).'"'.$this->eol; 
    146. $this->msg .= $this->eol.$this->boundary.$this->eol; 
    147. $this->msg .= 'Content-Type: text/html; charset=utf-8'.$this->eol; 
    148. $this->msg .= 'Content-Disposition: inline'.$this->eol; 
    149. $this->msg .= $this->eol.$this->content.$this->eol; 
    150. $this->msg .= $this->boundary.$this->eol; 
    151. $this->msg .= 'Content-Type: '.$this->mime_content_type($this->attach).$this->eol; 
    152. $this->msg .= 'Content-Disposition: attachment; filename="'.$this->filename.'"'.$this->eol; 
    153. $this->msg .= 'Content-Transfer-Encoding: base64'.$this->eol; 
    154. $this->msg .= $this->eol.$this->filestr.$this->eol; 
    155. $this->msg .= $this->eol.$this->boundary.'–'
    156. if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ 
    157. return 1; 
    158. }else
    159. return 0; 
    160. /* 
    161. * 不带抄送和附件 
    162. */ 
    163. private function mailSimple(){ 
    164. $this->header .= 'Content-type: text/html; charset=UTF-8'.$this->eol; 
    165. $this->header .= 'Content-Transfer-Encoding: 8bit'.$this->eol; 
    166. $this->msg = $this->content; 
    167. if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ 
    168. return 1; 
    169. }else
    170. return 0; 
    171. public function send(){ 
    172. if(emptyempty($this->attach)&&emptyempty($this->cc)){ 
    173. $this->outputCommonHeader(); 
    174. return $this->mailSimple(); 
    175. }else if(emptyempty($this->attach)){ 
    176. $this->outputCommonHeader(); 
    177. return $this->mailWithCC(); 
    178. }else if(emptyempty($this->cc)){ 
    179. $this->outputCommonHeader(); 
    180. $this->getBoundary(); //有附件就生成boundary 
    181. return $this->mailWithAttach(); 
    182. }else if(!emptyempty($this->toaddr)&&!emptyempty($this->topic)&&!emptyempty($this->cc)&&!emptyempty($this->content)&&!emptyempty($this->attach)){ 
    183. $this->outputCommonHeader(); 
    184. $this->getBoundary(); //有附件就生成boundary 
    185. return $this->mailAll(); 

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

    1. $m = new Mail(); 
    2. $m->setToaddr($this->temp['receipt_address']); 
    3. $m->setTopic($this->temp['mail_title']); 
    4. $m->setContent($this->temp['mail_content']); 
    5. $m->setFromaddr($_SESSION['user']['name'].' <'.$_SESSION['user']['name'].'@'.SystemDomain.'>'); 
    6. $m->setDomain('@'.SystemDomain); 
    7. $m->setCc($this->temp['cc_address']); 
    8. $m->setAttach(PATH.'/temp/'.$this->temp['attachment_file']); 
    9. $m->send(); 

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

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

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » 利用php中mail函数发送带有附件的邮件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级