• Smtp协议与Pop3协议的简单实现


    前言

    本文主要介绍smtp与pop3协议的原理,后面会附上对其的简单封装与实现。

    smtp协议对应的RFC文档为:RFC821

    smtp协议

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。(摘自百度百科)

    下图为SMTP协议发送邮件过程

    image

    用户在发送邮件时,会先按照SMTP协议,将邮件发送到发送者的SMTP服务器上,接着再由发送者SMTP服务器将邮件发送到接收者的SMTP邮件服务器上,最后由接收者通过pop3协议从接收服务器上将邮件下载下来。

    举个例子,用户A( aaa@126.com)要向用户B( bbb@qq.com)发送一封邮件,那么邮件会先发送到发送SMTP服务器上即smtp.126.com,然后由smtp.126.com投送到smtp.qq.com,最后再到bbb@qq.com上。

    通过以上描述,相信大家对邮件的收发过程有了一个大致的了解。那么接下来,我们来分析SMTP协议。

    SMTP协议定义了smtp服务器的端口,连接过程以及发送邮件过程,我们只要按照协议规定的步骤来即可。

    首先,我们需要使用socket来连接smtp的端口,默认端口为25。我们可以使用telnet来连接测试。我们在命令行中输入telnet smtp.126.com 25 来连接到网易的126邮箱服务器

    建立socket连接后,服务器会向我们返回欢迎信息,如下图所示:

    image

    接下来我们要向服务器发送用户名与密码信息来登陆到邮箱服务器。这里需要注意一点的是,smtp协议是基于字符串的,所以我们的用户名与密码要通过base64编码转换,这样就不会出现非法字符问题,后面代码中我会给中base64编码与解码的实现代码

    这里给大家一个在线的base64编码转换的网址,大家可以在上面转码后复制转换后的编码(http://tools.jb51.net/tools/base64_decode-gb2312.php)。

    登陆邮件服务器的命令为:

    EHLO smtp.126.com (说明: 代表换行回车操作)

    AUTH LOGIN (说明:登录命令)

    bACtNT55A== (说明base64编码后的用户名)

    MTIzYWRmYTEy (说明base64编码后的密码)

    image

    接下来我们不使用MAIL FROM:<xxx@xxxx.com>命令来告知邮件来自哪。然后使用RCPT TO:<xxxx1@xx.com>命令来告知发给谁,RCPT TO 后面只可以接多个RCPT TO表示向给多个接收者。最后使用DATA命令来传送编码后的邮件内容。

    在smtp协议中,每条命令以 结束,并且长度小于76,超过部分放入向一条命令。在使用DATA发送命令时,每76个字符一行,直到发送完所有数据。当发送完所有邮件数据时,我们需要告知邮件服务器我们发完数据了。smtp协议里规定,我们在发送完数据后,再发送一个 . 来表明数据发送完毕,示意如下:S代表发送者,R代表接收者,其中注意<CRLF>代表

    S: DATA

    R: 354 Start mail input; end with <CRLF>.<CRLF>

    S: Blah blah blah...

    S: ...etc. etc. etc.

    S: <CRLF>.<CRLF>

    R: 250 OK

  • 相关阅读:
    Android环境的构建
    [转载]java代码采用哈夫曼实现压缩软件
    [转载]java代码采用哈夫曼实现压缩软件
    用JAVA实现字符串压缩算法
    用JAVA实现字符串压缩算法
    J2ME 图片压缩算法
    J2ME 图片压缩算法
    C# 操作Excel
    csharp excel interop programming
    Sharepoint tools
  • 原文地址:https://www.cnblogs.com/ltm5180/p/4419863.html
Copyright © 2020-2023  润新知