用 php 实现 pop3 邮件的解码,用PHP实现POP3邮件的解码(三)(2)

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

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

if ($rec->messages>0)

{

if (!$rec->listmail()) die($rec->err_str);

echo "以下是信件内容:
";

for ($i=1;$i<=count($rec->mail_list);$i++)

{

echo "信件".$rec->mail_list[$i][num].",大小:".$rec->mail_list[$i][size]."
";

$rec->getmail($rec->mail_list[$i][num]);

$decoder->decode($rec->head,$rec->body);

echo "

邮件头的内容:


";

echo $decoder->from_name."(".$decoder->from_mail.") 于".date("Y-m-d H:i:s",$decoder->mail_time)." 发给".$decoder->to_name."(".$decoder->to_mail.")";

echo "\n
抄送:";

if ($decoder->cc_to) echo $decoder->cc_to;else echo "无";

echo "\n
主题:".$decoder->subject;

echo "\n
回复到:".$decoder->reply_to;

echo "

邮件正文 :


";

echo "正文类型:".$decoder->body_type;

echo "
正文各内容:";

for ($j=0;$jbody);$j++)

{

echo "\n
类型:".$decoder->body[$j][type];

echo "\n
名称:".$decoder->body[$j][name];

echo "\n
大小:".$decoder->body[$j][size];

echo "\n
content_id:".$decoder->body[$j][content_id];

echo "\n
正文字符集".$decoder->body[$j][char_set];

echo "

";

echo "正文内容:".$decoder->body[$j][content];

echo "

";

}

$rec->dele($i);

}

}

$rec->close();

?>

如有想要取得完整源代码的朋友,请与本人联系: boss_ch@netease.com

(编辑:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值