首页 > 其他分享 >邮箱项目学习之一 利用IMAP协议接…

邮箱项目学习之一 利用IMAP协议接…

时间:2023-07-31 22:35:25浏览次数:35  
标签:QQ 协议 OK LIST FETCH 按下 邮箱 IMAP 邮件


利用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 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
             
      a004 OK FETCH completed

      直到a004 OK FETCH completed之前是一封邮件的完整信头,a004 OK FETCH completed 表示请求完成了,接下来请求信件的内容,命令:
   5.  a005 fetch 1 body[text]                        
       按下确认键,会得到如下内容:
 

* 1 FETCH (BODY[TEXT] {582}
              ------=_NextPart_4A73E0B9_085D4350_07A7DBD5
        Content-Type: text/plain;
                 charset="gbk"
            
       ------=_NextPart_4A73E0B9_085D4350_07A7DBD5
        Content-Type: textml;
              charset="gbk"
            
     
     )


      

       

      除去a005 OK FETCH completed部分所得到的就是这封信的完整内容了。分别把信头和内容两部分内容拷贝下来粘贴到记事本中,把后缀名改成eml格式。然后打开就可以看到完整的一封信了。记得不要拷贝a005 OK FETCH completed这几句系统的提示;这是我的qq邮箱的一封信。为了不暴露我的秘密(呵呵,也没什么秘密)我去掉了一些敏感内容以“——”代替;所以我的这份信就不完整了呵!然后是退出邮箱,命令:
   6.  a006 logout                           
       按下enter,这就退出了;系统返回提示内容:
       * BYE LOGOUT received
      

      整个过程到这就结束了!当然还有很多命令没有用到,有需要用到的可以根据需要灵活应用。尤其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中好像不行,至于原因我也没去找。

标签:QQ,协议,OK,LIST,FETCH,按下,邮箱,IMAP,邮件
From: https://blog.51cto.com/u_3124497/6914143

相关文章

  • 邮箱系统学习笔记
            邮件删除privatevoid按钮处理函数(){Messagemsg=....msg.setFlag(Flags.Flag.DELETED);} 在这里应怎么对Message处理才能达到要求?  我在读邮件时对邮件设标记可以删除邮件,在其他别的地方就不行了,不知应......
  • HTTP协议详解
    HTTP协议详解我们在进行两台主机进行数据交互的时候,会遇到很多问题。如数据丢包,数据重复,数据完整性校验,数字转换模拟信号,信号衰竭等。为了简化网络的复杂度,网络通信的不同方面被分解为多层次结构,每一层只与紧挨着是上层或者下层交互,将网络分层,这样就可以修改,甚至替换某一层的......
  • 流媒体协议之SRS源码分析0731
    流媒体协议之SRS源码分析分析的源码具体版本号为:SRS(SimpleRealtimeServer)v6.0.36源码下载路径:https://down.chinaz.com/soft/51363.htm  启动流程图: SrsServer类图关系: ......
  • Flutter 3.0+ 利用VLC播放器使用rtsp协议,本地测试和打包压缩
    Flutter中使用rtsp协议在Flutter中可以集成VLC播放器通过rtsp协议连接到监控相机来实现远程监控,当然也可以用来做直播APP。使用flutter_vlc_player库扩展包地址点我跳转。首先在pubspec.yaml中添加库引用:dependencies:flutter_vlc_player:^7.2.0安卓端配......
  • CAN转EtherNet/IP网关can协议是什么意思
    JM-EIP-CAN 是自主研发的一款ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种CAN 总线和ETHERNET/IP 网络连接起来。本网关连接到ETHERNET/IP 总线中做为从站使用,连接到CAN 总线中根据节点号进行读写。技术参数ETHERNET/IP 技术参数网关做为ETHERNET/I......
  • #yyds干货盘点#JavaScript正则表达式(手机号码、邮箱、日期)
    JavaScript正则表达式(手机号码、邮箱、日期)在平时的工作中,经常会遇到一些验证的功能,其中如号码、邮箱、日期之类的验证,但是在平常使用时,直接就抄了一份用,并没有很详细的研究过,所以就在这儿记录了一些常用的表达式,慢慢学习的同时,也分享给大家。手机号码由于现在虚拟号码的使用,所以......
  • websocket应用的是哪个协议
    WebSocket应用的是WebSocket协议。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许在客户端和服务器之间建立持久性的连接,并支持双向实时数据传输。相比传统的HTTP请求-响应模式,WebSocket具有更低的延迟和更高的性能,适用于实时性要求较高的应用场景,如在线聊天、实时游戏......
  • CAN转EtherNet/IP网关can协议的特点
    你是否曾经遇到过不同的总线协议难以互相通信的问题?捷米的JM-EIP-CAN网关为你解决了这个烦恼!捷米JM-EIP-CAN通讯网关是一款自主研发的设备,它能够将各种CAN总线和ETHERNET/IP网络连接起来,解决不同总线协议之间的通信障碍。作为ETHERNET/IP总线的从站,它可以连接到CAN总线中,根据节点......
  • 浅谈php伪协议的运用
    浅谈php伪协议的运用(133条消息)PHPFilter伪协议Trick总结_php伪协议rot13的用法_swtre33的博客-CSDN博客php死亡exit()绕过-xiaolong'sblog(xiaolong22333.top)0x00ctf中常见的伪协议种类在CTF比赛中,常常会使用PHP伪协议来进行一些有趣的挑战。PHP伪协议是一种特殊的U......
  • IEC61499协议
    一IEC61499协议简述IEC61499协议标准用于分布式工业自动化系统,旨在实现分布式应用程序的可移植性、可重用性和互操作性。IEC61499定义了一种建模语言,该语言允许对整个控制系统进行建模,即使系统由较小的部分(单个PLC)组成,通过功能块(FB,FunctionBlock)的形式完成具体的控制功能。FB被......