php解析multilpart,使用PHP语言实现POP3邮件的解码
使用PHP语言实现POP3邮件的解码
时间:2009-02-17 来源:未知 作者:小远 点击:次
初步认识邮件的源文件 本文简要说明了通过pop3协议收取邮件、mime邮件的解码的原理;针对收取和mime解码,提供了两个实用的php类,并提供了使用的样例。分为邮件收
初步认识邮件的源文件
本文简要说明了通过pop3协议收取邮件、mime邮件的解码的原理;针对收取和mime解码,提供了两个实用的php类,并提供了使用的样例。分为邮件收取、mime解码两个部分。我们已经向您介绍过了邮件的收取,现在让我们来为您介绍本文的解码部。
在上一篇里,我们已经完成了一个用php通过pop3收取邮件的实例,可是在使用这个类的时候,相信你已经看到了,很多的邮件收下来是一堆乱码,自己根本看不懂!是的。现在的邮件大部分都已经经过了编码,需要一个解码的过程才能变成我们习惯的文字、图片、或是其它的附件。
邮件的源文件
首先,我们来看一段简单的邮件的源文件:(在foxmail中,选中邮件,点选“查看源文件”就会看到这样的些内容了)
from:
to:
subject: =?gb2312?b?xoo6w6oh?=
date: sun, 8 oct 2000 20:28:45 0800
mime-version: 1.0
content-type: multipart/alternative;
boundary="----=_nextpart_000_0007_01c03166.5b1e9510"
x-priority: 3
x-msmail-priority: normal
x-mailer: microsoft outlook express 5.00.2919.6700
x-mimeole: produced by microsoft mimeole v5.00.2919.6700
this is a multi-part message in mime format.
------=_nextpart_000_0007_01c03166.5b1e9510
content-type: text/plain;
charset="gb2312"
content-transfer-encoding: base64
w7vt0mlswuuwyao/dqo=
------=_nextpart_000_0007_01c03166.5b1e9510
content-type: text/html;
charset="gb2312"
content-transfer-encoding: base64
pcfet0nuwvbfiehutuwgufvcteldicitly9xm0mvl0rurcbive1midqumcbucmfuc2l0aw9uywwv
l0voij4ncjxive1mpjxirufepg0kpe1fveegy29udgvudd0idgv4dc9odg1soybjagfyc2v0pwdi
mjmxmiigahr0cc1lcxvpdj1db250zw50lvr5cgu dqo8tuvuqsbjb250zw50psjnu0hutuwgns4w
mc4yotiwljaiig5hbwu9r0vorvjbve9spg0kpfnuwuxfpjwvu1rzteu dqo8l0hfquq dqo8qk9e
wsbiz0nvbg9ypsnmzmzmzmy dqo8relwpjxgt05uihnpemu9mj7du9pqwtlc67djo788l0zptlq
pc9esvy pc9ct0rzpjwvsfrntd4ncg==
------=_nextpart_000_0007_01c03166.5b1e9510-
这样的一段邮件,我想没有人能看得懂的。不要急,我们来仔细看看这些内容。
from:
to:
这个是好理解的,邮件由boy@netease.com发送,收件人是boss_ch@china.com,这些标签的含义我们基本可从字面上理解到,像date:sun, 8 oct 2000 20:28:45 0800表示的是时间,x-priority: 3表示的是邮件的优先级,x-mailer: microsoft outlook express 5.00.2919.6700表示的是邮件发送器的名字,这里用的是outllook 5,不过,这些东西跟邮件的内容是没有很大关系的。我们不需要深究。
mime 编码方式简介
mime 编码方式简介
subject: =?gb2312?b?xoo6w6oh?=
这里是邮件的主题,可是因为编码了,我们看不出是什么内容,其原来的文本是:“你好!”我们先看看 mime 编码的两种方法。
对邮件进行编码最初的原因是因为 internet 上的很多网关不能正确传输8 bit 内码的字符,比如汉字等。编码的原理就是把 8 bit 的内容转换成 7 bit 的形式以能正确传输,在接收方收到之后,再将其还原成 8 bit 的内容。
mime 是“多用途网际邮件扩充协议”的缩写,在 mime 协议之前,邮件的编码曾经有过 uuencode 等编码方式 ,但是由于 mime 协议算法简单,并且易于扩展,现在已经成为邮件编码方式的主流,不仅是用来传输 8 bit 的字符,也可以用来传送二进制的文件 ,如邮件附件中的图像、音频等信息,而且扩展了很多基于mime 的应用。从编码方式来说,mime 定义了两种编码方法base64与qp(quote-printable) :
base 64 是一种通用的方法,其原理很简单,就是把三个byte的数据用 4 个byte表示,这样,这四个byte 中,实际用到的都只有前面6 bit,这样就不存在只能传输 7bit 的字符的问题了。base 64的缩写一般是“b”,像这封信中的subject 就是用的 base64 编码。
另一种方法是qp(quote-printable) 方法,通常缩写为“q”方法,其原理是把一个 8 bit 的字符用两个16进制数值表示,然后在前面加“=”。所以我们看到经过qp编码后的文件通常是这个样子:=b3=c2=bf=a1=c7=e5=a3=ac=c4=fa=ba=c3=a3=a1。
在 php 里,系统有两个函数可以很方便地实现解码:base64_decode()与quoted_printable_decode(),前者可用于base64 编码的解码,后者是用于 qp 编码方法的解码。
现在我们再来看看subject: =?gb2312?b?xoo6w6oh?= 这一主题的内容,这不是一段完整的编码,只有部分是编码了的,这个部分用 =? ?= 两个标记括起来,=? 后面说明的是这段文字的字符集是 gb2312 ,然后一个 ? 后面的一个 b 表示的是用的 base64 编码。通过这段分析,我们来看一下这个 mime 解码的函数:(该函数由 phpx.com 站长 sadly 提供,本人将其放入一个类中,并做了少量的修改,在此致谢)
------分隔线----------------------------
顶一下
(7)
63.6%
踩一下
(4)
36.4%
------分隔线----------------------------
php解析multilpart,使用PHP语言实现POP3邮件的解码相关推荐
- pop3.inc.php,用PHP实现POP3邮件的解码
初步认识邮件的源文件 本文简要说明了通过POP3协议收取邮件.MIME邮件的解码的原理:针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例.分为邮件收取.MIME解码两个部分.我们已 ...
- 织梦邮件php,用PHP实现POP3邮件的解码(一)
用PHP实现POP3邮件的解码(一) 来源:互连网 作者:佚名 时间:2005-10-31 Tag: 点击: 初步认识邮件的源文件 (作者:陈俊清 2000年10月24日 15:08) 本文简要说明了 ...
- 深入解析JNA—模拟C语言结构体
原帖:http://blog.csdn.net/shendl/article/details/3599849 深入解析JNA-模拟C语言结构体 前言 前几天写<JNA--JNI终结者>一文 ...
- 解析 TEA 加密算法(C语言、python):
目录 解析 TEA 加密算法(C语言.python): TEA 加密: XTEA 加密: XXTEA 加密: 解析 TEA 加密算法(C语言.python): TEA系列概述: TEA算法是由剑桥大学 ...
- cjson构建_[置顶] cJSON库(构建json与解析json字符串)-c语言
一.c语言获取json中的数据. 1.先要有cJOSN库,两个文件分别是cJSON.c和cJSON.h. 2.感性认识 char * json = "{ \"json\" ...
- 解析 RC4 加密算法(C语言、python)
目录 解析 RC4 加密算法(C语言.python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC ...
- 用PHP实现POP3邮件的收取(一)
POP协议简介 本文简要说明了通过POP3协议收取邮件.MIME邮件的解码的原理:针对收取和MIME解码,提供了两个实用的PHP类,并提供了运用的样例.分为邮件收取.MIME解码两个部分.这里我们先向 ...
- 有关POP3邮件接收服务的介绍
Win 2003配置邮件服务器 http://www.sina.com.cn 2008年09月26日 14:31 IT168.com 大家知道,邮件服务器系统由POP3服务.简单邮件传输协议( ...
- php 发送邮件与pop3邮件登录代码
php教程 发送邮件与pop3邮件登录代码 function send_msg($to,$subject,$body) { $send_addr = 'admin@test.com'; //发送人 ...
最新文章
- formZ Pro 9(3D绘图软件)中文版
- 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
- 了解jvm自动内存分配和内存自动回收的重要性
- pythonstdin_如何在Python中执行将数据写入stdin的进程?
- 十字链表存储稀疏矩阵
- 炫酷神器,AE插件Bodymovin.zxp的安装与使用
- Ubuntu安装OpenCV
- 【bzoj3144 切糕】
- mysql todate日期格式写法_MYSQL的日期格式date_format用法
- My SQL中PK、NN、UQ、BIN、UN、ZF、AI、G所代表的意义
- 解决比较Oracle中CLOB字段问题--转自混世者的专栏
- 3d渲染性能测试软件,3D渲染性能测试
- [自学笔记]UE4(虚幻四)初学者入门
- 各行业容灾备份架构#容灾#,
- i7 10750h是标压吗 属于什么档次 i7 10750h天梯图
- webstorm 扩大内存
- 读书笔记--PRML(1)
- ceph报 daemons have recently crashed
- JAVA毕业设计web家教管理系统计算机源码+lw文档+系统+调试部署+数据库
- 系列(十):JVM 演讲 PPT 分享