社区
C#
帖子详情
急!!!如何分离出pop3接收过来的邮件正文和附件?
kuangliqun
2003-05-21 01:01:56
我用C#做了一个接收邮件的程序,内容都能解码出来。可是接收到的邮件编码格式都各不相同,有的是用Boundary分离了邮件头、正文和附件,有的却没有。邮件内容分离的规则到底是什么?
...全文
664
4
打赏
收藏
急!!!如何分离出pop3接收过来的邮件正文和附件?
我用C#做了一个接收邮件的程序,内容都能解码出来。可是接收到的邮件编码格式都各不相同,有的是用Boundary分离了邮件头、正文和附件,有的却没有。邮件内容分离的规则到底是什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kuangliqun
2003-05-22
打赏
举报
回复
多谢!问题已经解决
coollzh
2003-05-21
打赏
举报
回复
Content-Disposition: attachment;
filename="Demo.zip"
后面紧跟两个空行,下面就是附件内容,编码有base64,也有QP
Essence_zhx
2003-05-21
打赏
举报
回复
关键是理解邮件的格式问题,关于邮件大的格式可以这样的看。在outlook中把邮件另存为.eml的文件,然后用记事本打开就可以看到邮件的格式了。
其中可以分为邮件头信息,和邮件体信息。而每个邮件体是有多个段构成的,每个段都标识了自己是什么内容以及使用什么格式存储的。
下面做一下具体的说明:
邮件头中有这样的一段(包括空):
Content-Type: multipart/related;
type="multipart/alternative";
boundary="----=_NextPart_000_0055_01C31A04.A7752710"
其中 ----=_NextPart_000_0055_01C31A04.A7752710 表示对于每一段的分隔标志不过在一段开始标志是 "--"+"分隔标志",这段的结束用"--"+"分隔标志"+"--""表示。而每段的内容又可以有自己的子段。例如:
------=_NextPart_000_0055_01C31A04.A7752710
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0056_01C31A04.A776ADB0"
这段表示子段的分隔符是----=_NextPart_001_0056_01C31A04.A776ADB0,下面看一下其中一个子段的内容。
------=_NextPart_001_0056_01C31A04.A776ADB0
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
IA0KDQogICAgICC49iDIyyC88iDA+g0KICAgICANCg0KDQoNCiAgICAgINDVIMP7o7og1cXP6A0K
DQogICAgICDQ1CCx8KO6IMTQDQoNCiAgICAgILP2yfrI1cbao7oxOTc5LzEyLzEwDQoNCiAgICAg
ILunIL/ao7ogtPPBrA0KDQogICAgICDEv8ewxOrQvaO6Ms3yyMvD8bHSDQoNCiAgICAgILmk1/e+
rdHpo7rSu8TqDQoNCiAgICAgILXn19PTyrz+o7praWx4eUBob3RtYWlsLmNvbQ0KDQogICAgICC1
5yAgICC7sKO6MTM4NDI2MjAxMDANCg0KICAgICAguPbIy9b30rOjusGsvdMNCg0KICAgICAgyO28
其中
Content-Type: text/plain;表示该段为文本类型,也就是说邮件以普通文本类性浏览的时候是这段内容。
charset="gb2312" 表示给段文本的编码为gb2312
Content-Transfer-Encoding: base64 表示该段的内容是以base64的编码存储的。
下面的乱码就是以base64格式存促的该具体内容。
再看另一段
------=_NextPart_000_0055_01C31A04.A7752710
Content-Type: image/gif;
name="clip_image003.gif"
Content-Transfer-Encoding: base64
Content-ID: <005301c319c1$993f9790$0b00a8c0@zhx>
R0lGODlhCgABAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAAAB
AAEAgAAAAAECAwICRAEAOw==
Content-Type: image/gif;表示该段内容是以.gif为结尾的图片。
name="clip_image003.gif"表示文件名
Content-Transfer-Encoding: base64 该段的编码
Content-ID: <005301c319c1$993f9790$0b00a8c0@zhx> 标识了该附件在邮件内的唯一表示,该标识可以在邮件以html格式发送时显示图片的url所用,例如要在邮件中显示这副图片可以这样<IMG src="cid:005101c319c1$993f9790$0b00a8c0@zhx">。
其中 Content-Type:类型的值不是随便写的下面是一些常见文件扩展名所对应关系。
扩展名 格式
".gif" --->"image/gif"
".gz" --->"application/x-gzip"
".htm" --->"text/html"
".html" --->"text/html"
".jpg" --->"image/jpeg"
".tar" --->"application/x-tar"
".txt" --->"text/plain"
".zip" --->"application/zip
好了说到这里你应该知道怎么做了吧。
jonescheng
2003-05-21
打赏
举报
回复
高人。学习
pop3
下载
邮件
之标准C程序(DPF方案)
在嵌入式中,DPF 方案,使用
POP3
协议下载
邮件
,标准C程序,仅相关SOCKET函数为系统特殊函数,可在不同平台简单移植。
邮件
附件
自动
接收
将
邮件
附件
接收
存到指定位置
PHP_
POP3
操作类
老外用PHP写的
POP3
类,内含mime解码,还有实例,非常不错的类,跟大家一起分享
基于Javamail的
邮件
收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT).zip
基于Javamail的
邮件
收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT) 摘 要 电子
邮件
在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。本文介绍了Javamail
邮件
收发系统的开发背景,对国内外现有的多种成熟的电子
邮件
系统进行分析和比较,总结
出
它们的优缺点,对Javamail技术进行深入研究,提
出
并设计实现了基于Javamail的
邮件
收发系统。本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发
邮件
提供与协议无关的访问。SMTP(简单
邮件
传输协议)是专门用来发送
邮件
的。POP(邮局协议)是专门用于
接收
邮件
的。JavaMail API是一种可选的、能用于读取、编写和发送电子消息的标准扩展包。 本文主要可分为四个部分。第一部分介绍了Javamail
邮件
系统的意义和现状。第二部分具体介绍了几种相关协议和Javamail API。第三部分主要介绍了系统的开发工具JAVA语言、Eclipse及其安装过程与配置方法。第四部分详细阐述了Javamail
邮件
收发系统的实现过程。 关键词:SMTP,POP,JAVAMAIL,
邮件
收发
邮件
的传送要依赖于具体的传输协议,主要有:SMTP、
POP3
、MIME。 (1)SMTP:简单
邮件
传输协议,它是一组用于由源地址到目的地传送
邮件
的规则,或者说是由它来控制信件传输的一种中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转
邮件
时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把Email寄到收信人的服务器上了,整个过程只需要几分钟。SMTP的开发最初是为了在封闭的网络中传送相对来说不太重要的简短信件,而不是为了在互联网中传送重要而敏感的信息,因此最初通过SMTP传输信件时 ,安全性不高。 (2)POP:邮局协议[5],当前的版本为3,也称作
POP3
。POP是一种允许用户从
邮件
服务器收发
邮件
的协议,它有两种版本,即POP2和
POP3
,都具有简单的电子
邮件
存储转发功能。POP2和
POP3
本质上类似,都属于离线式工作协议,但是由于使用了不通的协议端口,两者并不兼容。与SMTP协议相结合,
POP3
是目前最常用的电子
邮件
服务协议。在离线工作方式下,用户收发
邮件
时,首先通过
POP3
客户程序登录到支持
POP3
协议的
邮件
服务器,然后发送
邮件
及
附件
;接着,
邮件
服务器为该用户收存的
邮件
传送给
POP3
客户程序,并将这些
邮件
从服务器上删除;最后,
邮件
服务器将用户提交的发送
邮件
,转发到运行SMTP协议的计算机中,通过它实现
邮件
的最终发送。在为用户从
邮件
服务器收取
邮件
时,
POP3
是以该用户当前存储在服务器上全部
邮件
为对象进行操作的,并一次性将它们下载到用户端计算机中。一旦客户的
邮件
下载完毕,
邮件
服务器对这些
邮件
的暂存托管即告完毕。使用
POP3
,用户不能对他们贮存在
邮件
服务器上的
邮件
进行部分传输,离线工作方式适合那些从固定计算机上收发
邮件
的用户使用。 (3)MIME: 多用途网际
邮件
扩充协议,是最初的互联网电子
邮件
协议的一个扩展,说明了如何安排消息格式使消息在不同的
邮件
系统内进行交换。 MIME 的格式灵活,使人们能使用这一协议在互联网上交换不同类型的数据文件:音频,视频,图像,应用软件和其他类型的文件,也包括在最初的协议—简单
邮件
传送协议(SMTP)中的ASCII文本。 (4)IMAP:IMAP使用在
接收
信息的高级协议,目前版本为第4版,所以也被称为IMAP4。需要注意的是在使用IMAP时,
邮件
服务器必须支持该协议。从这个方面讲,我们并不能完全使用IMAP来替代POP,不能期待IMAP在任何地方都被支持。假如
邮件
服务器支持IMAP,那么我们的
邮件
程序将能够具有以下被IMAP所支持的特性[6]:每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。其与POP相比高级之处显而易见,但是在尝试采取IMAP时,我们认识到它并不是十分完美的。由于IMAP需要从其它服务器上
接收
新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为
邮件
服务器带来了高负载。并且IMAP与POP的一个不同之处是POP用户在
接收
邮件
时将从
邮件
服务器上下载
邮件
,而IMAP允许用户直接访问
邮件
目录,所以在
邮件
服务器进行备份作业时,由于每个长期使用此
邮件
系统的用户所用的
邮件
目录会占有很大的空间,这将直接导致
邮件
服务器上磁盘空间暴涨。 (5)NNTP和其它的第三方协议:正因为JavaMail API在设计时考虑到与第三方协议实现提供商之间的
分离
,故我们可以很容易的添加一些第三方协议。SUN维护着一个第三方协议实现提供商的列表:http://java.sun.com/products/javamail/Third_Par
ASP.NET基于Web Mail收发系统设计与开发(源代码+论文).rar
ASP.NET基于Web Mail收发系统设计与开发(源代码+论文).rar
C#
111,091
社区成员
642,555
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章