使用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邮件的解码相关推荐

  1. pop3.inc.php,用PHP实现POP3邮件的解码

    初步认识邮件的源文件 本文简要说明了通过POP3协议收取邮件.MIME邮件的解码的原理:针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例.分为邮件收取.MIME解码两个部分.我们已 ...

  2. 织梦邮件php,用PHP实现POP3邮件的解码(一)

    用PHP实现POP3邮件的解码(一) 来源:互连网 作者:佚名 时间:2005-10-31 Tag: 点击: 初步认识邮件的源文件 (作者:陈俊清 2000年10月24日 15:08) 本文简要说明了 ...

  3. 深入解析JNA—模拟C语言结构体

    原帖:http://blog.csdn.net/shendl/article/details/3599849 深入解析JNA-模拟C语言结构体 前言 前几天写<JNA--JNI终结者>一文 ...

  4. 解析 TEA 加密算法(C语言、python):

    目录 解析 TEA 加密算法(C语言.python): TEA 加密: XTEA 加密: XXTEA 加密: 解析 TEA 加密算法(C语言.python): TEA系列概述: TEA算法是由剑桥大学 ...

  5. cjson构建_[置顶] cJSON库(构建json与解析json字符串)-c语言

    一.c语言获取json中的数据. 1.先要有cJOSN库,两个文件分别是cJSON.c和cJSON.h. 2.感性认识 char * json = "{ \"json\" ...

  6. 解析 RC4 加密算法(C语言、python)

    目录 解析 RC4 加密算法(C语言.python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC ...

  7. 用PHP实现POP3邮件的收取(一)

    POP协议简介 本文简要说明了通过POP3协议收取邮件.MIME邮件的解码的原理:针对收取和MIME解码,提供了两个实用的PHP类,并提供了运用的样例.分为邮件收取.MIME解码两个部分.这里我们先向 ...

  8. 有关POP3邮件接收服务的介绍

    Win 2003配置邮件服务器 http://www.sina.com.cn   2008年09月26日 14:31   IT168.com 大家知道,邮件服务器系统由POP3服务.简单邮件传输协议( ...

  9. php 发送邮件与pop3邮件登录代码

    php教程 发送邮件与pop3邮件登录代码 function send_msg($to,$subject,$body) { $send_addr = 'admin@test.com';   //发送人 ...

最新文章

  1. formZ Pro 9(3D绘图软件)中文版
  2. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
  3. 了解jvm自动内存分配和内存自动回收的重要性
  4. pythonstdin_如何在Python中执行将数据写入stdin的进程?
  5. 十字链表存储稀疏矩阵
  6. 炫酷神器,AE插件Bodymovin.zxp的安装与使用
  7. Ubuntu安装OpenCV
  8. 【bzoj3144 切糕】
  9. mysql todate日期格式写法_MYSQL的日期格式date_format用法
  10. My SQL中PK、NN、UQ、BIN、UN、ZF、AI、G所代表的意义
  11. 解决比较Oracle中CLOB字段问题--转自混世者的专栏
  12. 3d渲染性能测试软件,3D渲染性能测试
  13. [自学笔记]UE4(虚幻四)初学者入门
  14. 各行业容灾备份架构#容灾#,
  15. i7 10750h是标压吗 属于什么档次 i7 10750h天梯图
  16. webstorm 扩大内存
  17. 读书笔记--PRML(1)
  18. ceph报 daemons have recently crashed
  19. JAVA毕业设计web家教管理系统计算机源码+lw文档+系统+调试部署+数据库
  20. 系列(十):JVM 演讲 PPT 分享

热门文章

  1. SAP读取财务报表版本的标准函数
  2. 电商教父李国庆的另类儒商气质:耿直与真诚
  3. java中为什么要用json_Java中使用JSON
  4. linux服务器无网络确认,Linux服务器故障排查实用指南
  5. 基于php响应式网站毕业论文,基于html5与css3的响应式web页面设计与实现.docx
  6. python3中numpy函数tile的用法
  7. Visual studio(VS)如何修改显示字体类型和字体大小?
  8. 如何遍历numpy数组?
  9. AI、ML论文网站、如何阅读论文?
  10. 素数筛选以及优化分析