邮件的发送与接收原理

一、 邮件开发涉及到的一些基本概念


1.1、邮件服务器和电子邮箱
  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。
  这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个帐号以及空间发送电子邮件和保存别人发送过来的电子邮件。

1.2、邮件传输协议
1.2.1、SMTP协议
  用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
1.2.2、POP3协议
  同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
1.3、电子邮件的发送和接收过程
  通过一张图来说明一封邮件的发送和接收过程,如下图所示:



简单说一下这个邮件收发过程:
  1、xdp@sohu.com 用户写好一封Email发送到sohu的Smtp服务器。对应于上图的步骤①
  2、sohu的Smtp服务器开始处理xdp@sohu.com 用户的请求,它会根据收件人的地址判断,当前收件人是不是自己管辖的用户,如果是,就直接将Email存放到为该收件人的分配的邮箱空间当中。sohu的Smtp服务器判断收件人地址发现,这一封Email的收件人gacl@sina.com 是Sina的邮件服务器管理的,于是又将Email转发给Sina的Smtp服务器。对应于上图的步骤②
  3、Sina的Smtp服务器开始处理sohu的Smtp服务器发送过来的Email,Sina的Smtp服务器根据收件人的地址判断,发现收件人自己管辖的用户,于是就直接将Email存放到为gacl@sina.com 用户的分配的邮箱空间当中。对应于上图的步骤③。
  4、xdp@sohu.com 用户将邮件发出去之后,就通知gacl@sina.com 用户去收取。gacl@sina.com 用户于是就连接上Sina的POP3服务器收取邮件,对应于上图的步骤④。
  5、POP3服务器从gacl@sina.com 用户的邮箱空间当中取出Email,对应于步骤⑤。
  6、POP3服务器将取出来的Email发给gacl@sina.com 用户,对应于步骤⑥。


二、使用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服务器,如下图所示:



通过telnet客户端发Email,如下图所示:



我们登录到<xdp_gacl@sina.cn>邮箱当中,就可以收取到由<gacl@sohu.com>发送的Email了,如下图所示:



这就是使用Smtp协议发送邮件的过程。


三、使用POP3协议接收邮件


3.1、POP3协议讲解
  POP3协议规定了收取邮件时要做以下几件事
①、输入用户名和密码登录到POP3服务器,用户名和密码不需要经过Base64加密
  user username --登录邮箱的用户名
  pass password --登录邮箱使用的密码
②、使用retr命令收取邮件
  retr 数字 收取邮件,retr 1表示收取邮箱当中的第一封邮件,这是POP3协议里面最重要的一个命令。
  在使用retr命令收取邮件之前,可以使用如下的两个命令查看一下邮箱里面的邮件的一些相关信息。
  stat
    返回邮箱里面的邮件数量以及邮件占用的空间大小信息
  list 数字
    返回某一封邮件的统计信息
③、邮件收取完成之后使用quit命令断开与POP3服务器的连接。
  quit 断开与POP3服务器的连接
3.2、使用POP3协议手工接收邮件
  收取邮件我们也不借助任何第三方客户端工具,而是使用Telnet客户端连接到POP3服务器进行收取。
  例如:现在我的搜狐邮箱当中有这样的一封邮件,如下图所示:



现在我们不用使用foxmail或者outLook这样的客户端工具去收取,而是使用Telnet客户端连接到搜狐的POP3服务器去手工收取。
  1、使用Telnet连接上搜狐的POP3服务器,使用命令:telnet pop3.sohu.com 110,如下图所示:


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



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

package me.gacl.encrypt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Base64Encrypt {

    public static void main(String args[]) throws IOException{
        /*System.out.print("请输入用户名:");
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String userName = in.readLine();
        System.out.print("请输入密码:");
        String password = in.readLine();
        BASE64Encoder encoder = new BASE64Encoder();
        System.out.println("编码后的用户名为:" + encoder.encode(userName.getBytes()));
        System.out.println("编码后的密码为:" + encoder.encode(password.getBytes()));*/
        
        BASE64Decoder decoder = new BASE64Decoder();
        //邮件主题的Base64编码
        String emailSubject = "=?GBK?B?08q8/rLiytQ=?=";
        //邮件文本内容的Base64编码
        String emailPlainContent = "vPK1pbXE08q8/reiy82y4srUo6E=";
        //带html标签和邮件内容的Base64编码
        String emailHtmlContent = "PFA+vPK1pbXE08q8/reiy82y4srUo6E8L1A+";
        //将使用Base64编码过后的文本内容再使用Base64来解码
        emailSubject = new String(decoder.decodeBuffer(emailSubject),"GBK");
        emailPlainContent = new String(decoder.decodeBuffer(emailPlainContent),"GBK");
        emailHtmlContent = new String(decoder.decodeBuffer(emailHtmlContent),"GBK");
        System.out.println("邮件标题:"+emailSubject);
        System.out.println("邮件内容:"+emailPlainContent);
        System.out.println("带html标签的邮件内容:"+emailHtmlContent);
    }
}

运行结果如下:


这就是使用POP3协议收取邮件的过程。
  以上就是邮件的发送与接收原理的相关内容,这一篇文章主要是介绍邮件发送和接收过程中使用到的smtp协议和pop3协议。没有涉及到太多代码方面的东西,后面会具体介绍使用JavaMail来进行邮件发送。

标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法创新点。1.1研究背景意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展实践应用。1.3研究方法创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBootVue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及前端的交互机制。2.3SpringBootVue的整合应用探讨SpringBootVue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建训练、性能评估,还包括了GUI界面的设计实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测预测维护、交通流量预测智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度和风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现和模型架构解析,还深入探讨了模型优化和实际应用中的挑战解决方案。因此,在学习过程中,建议结合理论实践,逐步理解各个模块的功能和实现细节,并尝试在自己的项目中应用这些技术和方法。同时,注意数据预处理的重要性,合理设置模型参数网络结构,控制多步预测误差传播,防范过拟合,规划计算资源训练时间,关注模型的可解释性和透明度,以及持续更新迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值