也许过去我不是一个好孩子,但现在我要做个好爸爸...... 注册 | 登陆

PHP发送SMTP邮件的代码(Part 2)

  继续上一次的介绍,上次介绍了发送邮件预定义的东西,比如服务器、端口什么的,还有邮件的主题、内容、收件人,本文开始介绍对元素进行处理。

PHP代码
  1. $mail['subject'] = str_replace("\n"''$mail['subject']);   
  2. $mail['subject'] = str_replace("\r"''$mail['subject']);   
  3. $mail['subject'] = '=?'.$charset.'?B?'.base64_encode($mail['subject']).'?=';   
  4.   
  5. $mail['message'] = str_replace("\n\r""\r"$mail['message']);   
  6. $mail['message'] = str_replace("\r\n""\n"$mail['message']);   
  7. $mail['message'] = str_replace("\r""\n"$mail['message']);   
  8. $mail['message'] = str_replace("\n""\r\n"$mail['message']);   
  9. $mail['message'] = str_replace("\r\n."" \r\n.."$mail['message']);   
  10. $mail['message'] = chunk_split(base64_encode($mail['message']));  

  这里是对邮件的主题和内容进行BASE64编码,这个东西似乎是比较通用的邮件编码了。不愧是知名论坛的程序,很严谨,对邮件主题禁止换行,对邮件正文所有能用到的换行全部替换掉了。人家原来是主题一行、正文一行,这里为了看起来方便,戒烟如你把每个命令分行写出来了,如果需要的话可以自己改回去。

  说下戒烟如你遇到的一个新函数“string chunk_split ( string body [, int chunklen [, string end]] )”,手册上这样说“本函数将字符串变成小段供其它函数使用。例如将 base64_encode 的输出转换成符合 RFC 2045 语义的字符串。它会在每 chunklen(默认为 76)个字符后边插入 end(默认为“\r\n”)”。

PHP代码
  1. if (preg_match('/^(.+?) \<(.+?)\>$/',$set['from'], $from)) {   
  2.     $set['from'] = '=?'.$charset.'?B?'.base64_encode($from[1]).'?= <'.$from[2].'>';   
  3. }   
  4.   
  5. foreach(explode(','$mail['to']) as $touser) {   
  6.     if (preg_match('/^(.+?) \<(.+?)\>$/',$touser$to)) {   
  7.         $tousers[] = '=?'.$charset.'?B?'.base64_encode($to[1]).'?= <'.$to[2].'>';   
  8.     } else $tousers[] = $touser;   
  9. }   
  10. $mail['to'] = implode(','$tousers);  

  这里是对发件人和收件人的地址进行处理,首先通过正则表达式判断地址是“发件人名称 <email@domain.com>”格式的还是单纯的邮件地址,如果是前者,则对发件人名称进行BASE64编码。

  回到上次说的空格,这里在正则表达式中也有一个空格,和前面对应。如果前面没有空格,这里把空格删除就可以了。

PHP代码
  1. $headers = 'From: '.$set['from'].$delimiter.   
  2.            'X-Priority: 3'.$delimiter.   
  3.            'X-Mailer: HuBing.info'.$delimiter.   
  4.            'MIME-Version: 1.0'.$delimiter.   
  5.            'Content-type: text/plain; charset='.$charset.$delimiter.   
  6.            'Content-Transfer-Encoding: base64'.$delimiter;  

  定义邮件头,分别是发件人、优先级、发送邮件的软件、MIME版本、邮件内容格式、邮件编码等,具体的可以研究下关于电子邮件的相关资料。

Tags: php, smtp

« 上一篇 | 下一篇 »

只显示5条记录相关文章

截取固定长度UTF-8字符串的PHP函数 (浏览: 34265, 评论: 2)
FPDF代码研究(Part 5) (浏览: 30548, 评论: 1)
FPDF代码研究(Part 4) (浏览: 11606, 评论: 1)
FPDF代码研究(Part 3) (浏览: 11838, 评论: 0)
FPDF代码研究(Part 2,构造函数) (浏览: 22514, 评论: 0)

发表评论

评论内容 (必填):