网络协议研究(二)POP3

上一次我们详细讨论了SMTP的方方面面,作为邮件发送中的基础协议,SMTP发挥了巨大的作用,是目前发送邮件的标准。SMTP是一个推送协议,将报文从用户推送到服务器。为了读取邮件,我们还需要将邮件拉取到客户,即今天研究的POP3和下一次将测试的IMAP。

测试代码下载 

POP3,全名为"Post Office Protocol - Version 3",即"邮局协议版本3"。是TCP/IP协议族中的一员,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S

POP 协议支持"离线"邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是 PC 机或 MAC。一旦邮件发送到 PC 机或 MAC 上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以"只下载邮件,服务器端并不删除",也就是改进的POP3协议。

一、POP3 RFCs

 

  • RFC 1939 - "Post Office Protocol - Version 3"
  • RFC 2195 - "IMAP/POP AUTHorize Extension for Simple Challenge/Response"
  • RFC 2449 - "POP3 Extension Mechanism"
  • RFC 1734 - "POP3 AUTHentication command"
  • RFC 2222 - "Simple Authentication and Security Layer (SASL)"
  • RFC 3206 - "The SYS and AUTH POP Response Codes"
  • RFC 2595 - "Using TLS with IMAP, POP3 and ACAP"
  • RFC 937 - "POST OFFICE PROTOCOL - VERSION 2"
  • RFC 918 - "POST OFFICE PROTOCOL"

 

二、POP3流程

 

三、获取邮件并分析

.NET中没有对POP3的相关操作进行封装,故我采用了第三方解决方案,LumiSoft.Net类库。

LumiSoft.Net是由Ivar Lumi开发的免费,开放源码的.Net网络协议库,包含了DNS Client, FTP Client/Server, ICMP, IMAP Client/Server, MIME, NNTP, POP3 Client/Server, SMTP Client/Server等协议/规范的实现。你可以在这里下载所有的源码/二进制文件/文档,也可以在LumiSoft.Net Forum里获取支持。

 

SVN:

https://svn.lumisoft.ee:8443/svn/LumiSoft_Net/

User: readonly

Password: readonly

 

还是打开VS2010,建立一个控制台项目,写入如下代码:

 

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Net.Mail;
using  LumiSoft.Net.Mime;
using  LumiSoft.Net.POP3.Client;
using  System.IO;

namespace  POP3Demo
{
    
class  Program
    {
        
private   void  POP3Test()
        {
            
using  (POP3_Client pop3  =   new  POP3_Client())
            {
                
// 与Pop3服务器建立连接
                pop3.Connect( " pop.163.com " 110 false );
                
// 验证身份
                pop3.Authenticate( " undead_47@163.com " " ****** " false );

                FileStream fs 
=   new  FileStream( " mail.txt " , FileMode.OpenOrCreate, FileAccess.ReadWrite);
                StreamWriter sw 
=   new  StreamWriter(fs);
                
// get all messages
                 foreach  (POP3_ClientMessage info  in  pop3.Messages)
                {
                    
byte [] bytes  =  info.MessageToByte();
                    Mime mime 
=  Mime.Parse(bytes);

                    sw.Write(mime.BodyText 
+   " \n\n " );
                }

                sw.Flush();
                fs.Flush();
                sw.Close();
                fs.Close();
            }
        }

        
static   void  Main( string [] args)
        {
            Program p 
=   new  Program();
            p.POP3Test();
        }
    }
}

 

 

 

打开WireShark,Filter输入POP,运行代码,可以看到相关的报文:

 

我将读取的邮件保存在了mail.txt中:

 

四、POP3常见命令

以下对几个常用的pop3命令作一个简单的介绍:

命令

参数

状态

描述

user

username

认可

此命令与下面的pass命令若成功,将导致状态转换

pass

password

认可

 

apop

name,digest

认可

一种安全传输口令的办法,digest是md5消息摘要,执行成功导致状态转换,请参见RFC 1321

stat

none

处理

请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

uidl

[msg#]

处理

返回邮件的唯一标识符,pop3会话的每个标识符都将是唯一的

list

[msg#]

处理

返回邮件数量和每个邮件的大小

retr

[msg#]

处理

返回由参数标识的邮件的全部文本

dele

[msg#]

处理

服务器将由参数标识的邮件标记为删除,由quit命令执行

rset

none

处理

服务器将重置所有标记为删除的邮件,用于撤消dele命令

top

[msg#],n

处理

服务器将返回由参数标识的邮件前n行内容,n必须是正整数

noop

none

处理

服务器返回一个肯定的响应,不做任何操作。

quit

none

更新

退出

 

小结:

POP3目前也被几乎所有邮件服务提供商所支持,国内除了新浪免费邮箱不支持POP3加密外,其他主流服务商均提供POP3加密。POP3很简单,但是功能有限。如POP3不能在下载邮件之前检查邮件的头部、搜索邮件内容,无法自定义服务器邮箱等。而这些正是IMAP的优点,正因如此,目前广泛使用的邮件协议为SMTP/IMAP,POP3并不常用。关于IMAP的介绍请参阅后续篇章。

转载于:https://www.cnblogs.com/brooks-dotnet/archive/2011/02/04/1949166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值