快速业务通道

用PHP实现POP3邮件的解码(三)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
>tem_num][name]="超文本正文";
break;
case "text/plain":
$this->body[$this->tem_num][name]="文本正文";
break;
default:
$this->body[$this->tem_num][name]="未知正文";
}  

// 下一行开始取回正文
if ($this->get_content_num==-1 or $this->get_content_num==$this->tem_num) // 判断这个部分是否是需要的。-1 表示全部
{
$content="";
while (!ereg($boundary,$this->body_temp[$i]))
{
//$content[]=$this->body_temp[$i];
$content.=$this->body_temp[$i]."\r\n";
$i++;
}
//$content=implode("\r\n",$content);
switch ($code_type)
{
case "base64":
$content=base64_decode($content);
break;
case "quoted-printable":
$content=str_replace("\n","\r\n",quoted_printable_decode($content));
break;
}
$this->body[$this->tem_num][size]=strlen($content);
$this->body[$this->tem_num][content]=$content;
}
else
{
while (!ereg($boundary,$this->body_temp[$i]))
$i++;
}
$this->tem_num++;
}
// end else
} // end while;
} // end function define
function decode_mime($string) {
//decode_mime 已在上文中给出,这里略过。
}
} // end class define

在这里要特别说明一点的是html正文里所用图片的解码。发送html格式的正文时,都会碰到图片如何传送的问题。图片在 html 文档里是一个<img src="" >的标签,关键是这个源文件从何来的。很多邮件的处理方法是用一个绝对的 url 标识,就是在邮件的html正文里用<img src= http://www.ccidnet.com/image/22.gif >之类的标签,这样,在阅读邮件时,邮件阅读器(通常是用内嵌的浏览器)会自动从网上下载图片,但是如果邮件收下来之后,与 Internet 的连接断了,图片也就不能正常显示。

所以更好的方法是把图片放在邮件中一起发送出去。在 MIME 编码里,描述图片与正文的关系,除了上面所提到的multipart/related MIME头信息之外,还用到了一个 Content-ID: 的属性来使图片与 html 正文之间建立关系。html 文档中的图片在编码时,其MIME头中加入一个 Content-ID:122223443556dsdf@ntsever 之类的属性,122223443556dsdf@ntsever是一个唯一的标识,在 html 文档里,<img>标签被修改成<img src="cid: 122223443556dsdf@ntsever">,在解码的时候,实际上,还需要把 html 正文中的这些<img src>标签进行修改,使之指向解码后的图片的具体路径。但是考虑到具体的解码程序中对图片会有不同的处理,所以在这个解码的类中,没有对 hmtl 正文中的<img>标签进行修改。所以在实际使用这个类时,对于有图片的 html 正文,还需要一定的处理。正文中的图片,可以用临时文件来保存,也可以用数据库来保存。

现在我们已经介绍了POP3 收取邮件并进行 MIME 解码的原理。下面给出一个使用这两个类的一段小程序:

<?
include("pop3.inc.php");
include("mime.inc.php");
$host="pop.china.com";
$user="boss_ch";
$pass="mypassWord";
$rec=new pop3($host,110,2);
$decoder=new decode_mail();
if (!$rec->open()) die($rec->err_str);
if (!$rec->login($user,$pass)) die($rec->err_str);
if (!$rec->stat()) die($rec->err_str);
echo "共有".$rec->messages."封信件,共".$rec->size."字节大小<br>";
if ($rec->m

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号