返回列表 发帖

邮件发送和接收原理

使用Smtp协议发送邮件

2.1、Smtp协议讲解

  使用smtp协议发送邮件给邮件服务器时规定了要做以下几件事

  1、使用"ehlo"命令和连接上的smtp服务器打声招呼,例如:

     ehlo gacl

  2、使用"auth login"命令登录到Smtp服务器,登录使用的用户名和密码必须经过Base64加密,例如:   

    ①、输入命令:auth login  

    ②、输入使用Base64加密过后的用户名:Z2FjbA==  

    ③、输入Base64加密过后的密码:MTIzNDU2

  3、指明邮件的发件人和收件人

    mail from:<gacl@sohu.com>

    rcpt to:<xdp_gacl@sina.cn>

   4、编写要发送的邮件内容,邮件的编写格式是有一定的规则的,一封格式良好的邮件应该包含邮件头和邮件的主体内容。

    邮件头使用下面的三个字段来指明

from字段用于指明邮件的发送人
to字段用于指明邮件的收件人
subject字段用于指明邮件的主题
    邮件的内容包含了这些信息之后才是一封格式良好的邮件。

    ①、输入"data"命令

      data

    ②、编写邮件内容

      from:<gacl@sohu.com>    ----邮件头

      to:<xdp_gacl@sina.cn>     ----邮件头

      subject:hello          ----邮件头

                      -----空行

      hello gacl            ----邮件的具体内容

  5、输入一个.告诉邮件服务器邮件内容已经写完了

    .

  6、输入quit命令断开与邮件服务器的连接

    quit

  以上的6个步骤就是Smtp协议规定的发送一封Email必须要做的事情。
宁做真小人,不做伪君子

2.2、使用Smtp协议手工发送邮件

  在对Smtp协议有一定的了解之后,我们就可以使用Smtp协议来发送邮件了。下面演示一下使用Telnet客户端连接上搜狐的邮件服务器然后发一封Email到新浪的邮箱中去

  为了能够对Smtp协议有一个直观的认识,这里我们不借助任何第三方邮件客户端工具,而是使用最原始的的Telnet客户端来完成邮件的发送过程,Telnet是一个Window自带的网络客户端程序,通过它可以连接上互联网上面的任意一台主机。

  使用telnet客户端连接到搜狐的smtp服务器,如下图所示:


1.png
2018-10-18 10:06

宁做真小人,不做伪君子

TOP

 通过telnet客户端发Email,如下图所示:
2.png
2018-10-18 10:07

宁做真小人,不做伪君子

TOP

使用POP3协议接收邮件

3.1、POP3协议讲解

  POP3协议规定了收取邮件时要做以下几件事

①、输入用户名和密码登录到POP3服务器,用户名和密码不需要经过Base64加密

  user username --登录邮箱的用户名
  pass password --登录邮箱使用的密码

②、使用retr命令收取邮件
  retr 数字 收取邮件,retr 1表示收取邮箱当中的第一封邮件,这是POP3协议里面最重要的一个命令。

  在使用retr命令收取邮件之前,可以使用如下的两个命令查看一下邮箱里面的邮件的一些相关信息。

  stat

    返回邮箱里面的邮件数量以及邮件占用的空间大小信息
  list 数字

    返回某一封邮件的统计信息

③、邮件收取完成之后使用quit命令断开与POP3服务器的连接。
  quit 断开与POP3服务器的连接
宁做真小人,不做伪君子

TOP

使用Telnet连接上搜狐的POP3服务器,使用命令:telnet pop3.sohu.com 110,如下图所示:
4.gif
2018-10-18 10:08
宁做真小人,不做伪君子

TOP

根据POP3协议规定的邮件收取步骤来收取邮件。如下图所示:

5.png
2018-10-18 10:08

宁做真小人,不做伪君子

TOP

 可以看到,我们POP3协议纯手工从搜狐的POP3服务器当中收取回来了一封Email,Email里面的内容都经过了Base64编码处理,下面我们写一个小程序将经过Base64编码后的邮件内容进行解码,还原回邮件的内容,代码如下:

1 package me.gacl.encrypt;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6
7 import sun.misc.BASE64Decoder;
8 import sun.misc.BASE64Encoder;
9
10 public class Base64Encrypt {
11
12     public static void main(String args[]) throws IOException{
13         /*System.out.print("请输入用户名:");
14         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
15         String userName = in.readLine();
16         System.out.print("请输入密码:");
17         String password = in.readLine();
18         BASE64Encoder encoder = new BASE64Encoder();
19         System.out.println("编码后的用户名为:" + encoder.encode(userName.getBytes()));
20         System.out.println("编码后的密码为:" + encoder.encode(password.getBytes()));*/
21         
22         BASE64Decoder decoder = new BASE64Decoder();
23         //邮件主题的Base64编码
24         String emailSubject = "=?GBK?B?08q8/rLiytQ=?=";
25         //邮件文本内容的Base64编码
26         String emailPlainContent = "vPK1pbXE08q8/reiy82y4srUo6E=";
27         //带html标签和邮件内容的Base64编码
28         String emailHtmlContent = "PFA+vPK1pbXE08q8/reiy82y4srUo6E8L1A+";
29         //将使用Base64编码过后的文本内容再使用Base64来解码
30         emailSubject = new String(decoder.decodeBuffer(emailSubject),"GBK");
31         emailPlainContent = new String(decoder.decodeBuffer(emailPlainContent),"GBK");
32         emailHtmlContent = new String(decoder.decodeBuffer(emailHtmlContent),"GBK");
33         System.out.println("邮件标题:"+emailSubject);
34         System.out.println("邮件内容:"+emailPlainContent);
35         System.out.println("带html标签的邮件内容:"+emailHtmlContent);
36     }
37 }
宁做真小人,不做伪君子

TOP

宁做真小人,不做伪君子

TOP

返回列表