邮箱项目学习之一 利用IMAP协议接…
2014-12-16 20:37
363 查看
利用IMAP协议接收邮件
Internet
Message Access
Protocol(缩写为IMAP,以前称作交互邮件访问协议)是一个应用层协议,用来从本地邮件客户端(如MicrosoftOutlook、Outlook
Express、Foxmail、Thunderbird)访问远程服务器上的邮件。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。这里做简单介绍,要想详细了解google、百度一搜一大堆。
目前,支持imap协议的免费邮箱我所知道的有Gmail,QQmail以及foxmail,当然可能(一定)还有其它的邮箱。首先在telnet下利用IMAP命令获取QQ邮箱的邮件信息:
首先在[开始]->[运行]中输入cmd
点击确定
1. 输入:telnet
imap.qq.com
143
按下确认键
连接成功的话会有得到如下内容:
* OK [CAPABILITY IMAP4 IMAP4rev1 AUTH=LOGIN AUTH=PLAIN NAMESPACE]
QQMail IMAP4Se
rver ready
接下来验证账号
输入:a001 login 用户名 密码
按下确认键,账号密码正确的话会得到如下内容:
a001 OK Success login ok
这里说一下a001,这个东西不是固定的,随便是个什么标签就行,你可以换成a,也可以换成b。用户名只填账号不用@qq.com;输入的时候不要出错,出错了就算改过来也不行了,要重新输一次。验证完账号后就是进入邮箱了,如果要取信当然先取箱子了,下面是取箱子命令:
2. a002
list ""
*
按下确认键,会得到如下内容:
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\NoSelect \HasChildren) "/"
"&UXZO1mWHTvZZOQ-"
* LIST (\HasNoChildren) "/"
"&XfJT0ZABkK5O9g-"
* LIST (\HasNoChildren) "/" "&g0l6P3ux-"
* LIST (\HasNoChildren) "/"
"&XfJSIJZkkK5O9g-"
* LIST (\HasNoChildren) "/"
"&V4NXPnux-"
* LIST (\HasNoChildren) "/"
"&UXZO1mWHTvZZOQ-&kK5O9ouilgU-"
a002 OK LIST completed
取箱子成功!一共有7个箱子,其它的可能看不太明白。INBOX大家应该都知道是收件箱了;接下来知道有些什么箱子了,就要告诉服务器你想对哪个箱子进行操作,就是要选择一个箱子,命令如下:
3. a003
select
inbox
按下确认键,会得到如下内容:
* 4 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1256348146] UID validity status
* OK [UIDNEXT 9] Predicted next UID
*
FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)]
Permanent flags
a003
OK [READ-WRITE] SELECT complete
其中
EXISTS前面的数字“4”表示邮件总数,RECENT前面的数字“0”表示新邮件数目(就是未读邮件);既然有邮件就可以查看内容了,输入命令:
4.
a004 fetch 1
body[header] //参看上一篇
IMAP命令学习
按下确认键,会得到如下内容:
* 1 FETCH (BODY[HEADER] {616}
X-QQ-ThreadID:7ESNSJ1vQe,0
X-Originating-IP: 222.90.213.4
X-QQ-mid:webmail——————
X-QQ-STYLE:
From: "=?gbk?B?RGFubHkgL21u?=" <——————@qq.com>
To: "=?gbk?B?wO67og==?=" <——————@qq.com>
Sender:——————@qq.com
Subject: =?gbk?B?sK7H6dDt1LjK9yzH6cjLusPUyyE=?=
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_4A73E0B9_085D4350_07A7DBD5"
Content-Transfer-Encoding: 8Bit
Date: Sat, 1 Aug 2009 14:29:13 +0800
X-Priority: 3
Message-ID: <————————————@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
)
a004 OK FETCH
completed
直到a004 OK FETCH completed之前是一封邮件的完整信头,a004 OK FETCH completed
表示请求完成了,接下来请求信件的内容,命令:
5. a005
fetch 1
body[text]
按下确认键,会得到如下内容:
* 1 FETCH (BODY[TEXT] {582}
This is a multi-part message in MIME format.
------=_NextPart_4A73E0B9_085D4350_07A7DBD5
Content-Type: text/plain;
charset="gbk"
Content-Transfer-Encoding: base64
——————————————————=
------=_NextPart_4A73E0B9_085D4350_07A7DBD5
Content-Type: textml;
charset="gbk"
Content-Transfer-Encoding: base64
——————————————————————————
------=_NextPart_4A73E0B9_085D4350_07A7DBD5--
)
a005 OK FETCH completed
除去a005 OK FETCH
completed部分所得到的就是这封信的完整内容了。分别把信头和内容两部分内容拷贝下来粘贴到记事本中,把后缀名改成eml格式。然后打开就可以看到完整的一封信了。记得不要拷贝a005
OK FETCH
completed这几句系统的提示;这是我的qq邮箱的一封信。为了不暴露我的秘密(呵呵,也没什么秘密)我去掉了一些敏感内容以“——”代替;所以我的这份信就不完整了呵!然后是退出邮箱,命令:
6.
a006
logout
按下enter,这就退出了;系统返回提示内容:
* BYE LOGOUT received
a006 OK LOGOUT Completed
整个过程到这就结束了!当然还有很多命令没有用到,有需要用到的可以根据需要灵活应用。尤其fetch命令功能相当强大,这里只说了点皮毛。本例是以QQ邮箱为例,可以用QQ账号、密码试一试;
Gmail也支持imap协议,但Gmail对数据进行了SSL加密(安全套接层(Secure Sockets
Layer)协议e);所以在telnet中是操作不成的,但可以利用程序实现;利用程序实现imap接收邮件原理与在telnet下实现基本相同,连接服务器后向服务器依次发送请求,分析分析服务器返回的信息,保存自己需要的内容就可以了。其中QQ的端口是143,而Gmail的端口号为993,QQ邮箱没有对数据流进行ssl加密,所以用NetworkStream=TcpClient.GetStream()得到服务器的数据流就可以向里面读写数据了,而Gmail用NetworkStream就行不通了,需要用到SslStream
=new
SslStream(tcpServer.GetStream());之后需要加一句SslStream.AuthenticateAsClient(m_serv);这样才能得到数据流,此时也可以向数据流读写数据了。之前写pop的时候我用的是sslStream
= new SslStream(tcpServer.GetStream(), false, delegate(Object
sender, X509Certificatecertificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors) { return true; });
但是在imap中好像不行,至于原因我也没去找。
Internet
Message Access
Protocol(缩写为IMAP,以前称作交互邮件访问协议)是一个应用层协议,用来从本地邮件客户端(如MicrosoftOutlook、Outlook
Express、Foxmail、Thunderbird)访问远程服务器上的邮件。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。这里做简单介绍,要想详细了解google、百度一搜一大堆。
目前,支持imap协议的免费邮箱我所知道的有Gmail,QQmail以及foxmail,当然可能(一定)还有其它的邮箱。首先在telnet下利用IMAP命令获取QQ邮箱的邮件信息:
首先在[开始]->[运行]中输入cmd
点击确定
1. 输入:telnet
imap.qq.com
143
按下确认键
连接成功的话会有得到如下内容:
* OK [CAPABILITY IMAP4 IMAP4rev1 AUTH=LOGIN AUTH=PLAIN NAMESPACE]
QQMail IMAP4Se
rver ready
接下来验证账号
输入:a001 login 用户名 密码
按下确认键,账号密码正确的话会得到如下内容:
a001 OK Success login ok
这里说一下a001,这个东西不是固定的,随便是个什么标签就行,你可以换成a,也可以换成b。用户名只填账号不用@qq.com;输入的时候不要出错,出错了就算改过来也不行了,要重新输一次。验证完账号后就是进入邮箱了,如果要取信当然先取箱子了,下面是取箱子命令:
2. a002
list ""
*
按下确认键,会得到如下内容:
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\NoSelect \HasChildren) "/"
"&UXZO1mWHTvZZOQ-"
* LIST (\HasNoChildren) "/"
"&XfJT0ZABkK5O9g-"
* LIST (\HasNoChildren) "/" "&g0l6P3ux-"
* LIST (\HasNoChildren) "/"
"&XfJSIJZkkK5O9g-"
* LIST (\HasNoChildren) "/"
"&V4NXPnux-"
* LIST (\HasNoChildren) "/"
"&UXZO1mWHTvZZOQ-&kK5O9ouilgU-"
a002 OK LIST completed
取箱子成功!一共有7个箱子,其它的可能看不太明白。INBOX大家应该都知道是收件箱了;接下来知道有些什么箱子了,就要告诉服务器你想对哪个箱子进行操作,就是要选择一个箱子,命令如下:
3. a003
select
inbox
按下确认键,会得到如下内容:
* 4 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1256348146] UID validity status
* OK [UIDNEXT 9] Predicted next UID
*
FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)]
Permanent flags
a003
OK [READ-WRITE] SELECT complete
其中
EXISTS前面的数字“4”表示邮件总数,RECENT前面的数字“0”表示新邮件数目(就是未读邮件);既然有邮件就可以查看内容了,输入命令:
4.
a004 fetch 1
body[header] //参看上一篇
IMAP命令学习
按下确认键,会得到如下内容:
* 1 FETCH (BODY[HEADER] {616}
X-QQ-ThreadID:7ESNSJ1vQe,0
X-Originating-IP: 222.90.213.4
X-QQ-mid:webmail——————
X-QQ-STYLE:
From: "=?gbk?B?RGFubHkgL21u?=" <——————@qq.com>
To: "=?gbk?B?wO67og==?=" <——————@qq.com>
Sender:——————@qq.com
Subject: =?gbk?B?sK7H6dDt1LjK9yzH6cjLusPUyyE=?=
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_4A73E0B9_085D4350_07A7DBD5"
Content-Transfer-Encoding: 8Bit
Date: Sat, 1 Aug 2009 14:29:13 +0800
X-Priority: 3
Message-ID: <————————————@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
)
a004 OK FETCH
completed
直到a004 OK FETCH completed之前是一封邮件的完整信头,a004 OK FETCH completed
表示请求完成了,接下来请求信件的内容,命令:
5. a005
fetch 1
body[text]
按下确认键,会得到如下内容:
* 1 FETCH (BODY[TEXT] {582}
This is a multi-part message in MIME format.
------=_NextPart_4A73E0B9_085D4350_07A7DBD5
Content-Type: text/plain;
charset="gbk"
Content-Transfer-Encoding: base64
——————————————————=
------=_NextPart_4A73E0B9_085D4350_07A7DBD5
Content-Type: textml;
charset="gbk"
Content-Transfer-Encoding: base64
——————————————————————————
------=_NextPart_4A73E0B9_085D4350_07A7DBD5--
)
a005 OK FETCH completed
除去a005 OK FETCH
completed部分所得到的就是这封信的完整内容了。分别把信头和内容两部分内容拷贝下来粘贴到记事本中,把后缀名改成eml格式。然后打开就可以看到完整的一封信了。记得不要拷贝a005
OK FETCH
completed这几句系统的提示;这是我的qq邮箱的一封信。为了不暴露我的秘密(呵呵,也没什么秘密)我去掉了一些敏感内容以“——”代替;所以我的这份信就不完整了呵!然后是退出邮箱,命令:
6.
a006
logout
按下enter,这就退出了;系统返回提示内容:
* BYE LOGOUT received
a006 OK LOGOUT Completed
整个过程到这就结束了!当然还有很多命令没有用到,有需要用到的可以根据需要灵活应用。尤其fetch命令功能相当强大,这里只说了点皮毛。本例是以QQ邮箱为例,可以用QQ账号、密码试一试;
Gmail也支持imap协议,但Gmail对数据进行了SSL加密(安全套接层(Secure Sockets
Layer)协议e);所以在telnet中是操作不成的,但可以利用程序实现;利用程序实现imap接收邮件原理与在telnet下实现基本相同,连接服务器后向服务器依次发送请求,分析分析服务器返回的信息,保存自己需要的内容就可以了。其中QQ的端口是143,而Gmail的端口号为993,QQ邮箱没有对数据流进行ssl加密,所以用NetworkStream=TcpClient.GetStream()得到服务器的数据流就可以向里面读写数据了,而Gmail用NetworkStream就行不通了,需要用到SslStream
=new
SslStream(tcpServer.GetStream());之后需要加一句SslStream.AuthenticateAsClient(m_serv);这样才能得到数据流,此时也可以向数据流读写数据了。之前写pop的时候我用的是sslStream
= new SslStream(tcpServer.GetStream(), false, delegate(Object
sender, X509Certificatecertificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors) { return true; });
但是在imap中好像不行,至于原因我也没去找。
相关文章推荐
- 邮箱项目学习之二&nbsp;IMAP命令学习
- android&nbsp;值得学习的项目源码
- 在做mes系统时,利用D7 IdMessage&IdSMTP发送邮件,从盒子上学习了不少的东西,自己整理了一下,想share给新手,学习参考!
- Asp.Net MVC && SmartDAL项目实践(三) Cookie的简单利用
- [原]Django book学习笔记_第五章 …
- Uchome1.2&nbsp;1.5&nbsp;代码学习&nbsp;common.ph…
- 学习sql&nbsp;server&nbsp;analsis&nbsp;service&nbsp;2…
- 利用协议分析工具学习TCP/IP并捕获内网用户密码
- Oracle的学习路径 《摘自itpub …
- Windows Phone 8 学习志(探索问题一:如何简单利用Windows Phone Runtime Component项目类型实现C#和C++交互)
- 邮箱系统原理——POP3协议和IMAP协议
- TCP/IP 协议基本知识笔记
- 房地产业务学习(06)-开发项目管理的难点分析&IT系统价值
- 利用JavaMail通过POP3协议、IMAP协议收取Gmail邮箱
- 利用POP3协议来管理自己的邮箱
- 利用ISA实现网站发布&&协议重定向
- 不看不知道&nbsp;教你如何设置iPhone邮箱
- MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目
- Objective-C学习笔记 利用协议实现回调函数
- 【原创】 线段树学习总结