热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

JavaWeb实现邮件发送接收功能

这篇文章主要为大家详细介绍了JavaWeb邮件发送接收功能的实现,邮件发送和接收功能是非常常用的功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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:

    rcpt to:

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

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

  • from字段用于指明邮件的发送人
  • to字段用于指明邮件的收件人
  • subject字段用于指明邮件的主题

邮件的内容包含了这些信息之后才是一封格式良好的邮件。

    ①、输入"data"命令

      data

    ②、编写邮件内容

      from:    ----邮件头

      to:     ----邮件头

      subject:hello         ----邮件头

                       -----空行

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

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

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

以上的6个步骤就是Smtp协议规定的发送一封Email必须要做的事情。

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

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

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

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

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

  我们登录到邮箱当中,就可以收取到由发送的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来进行邮件发送,点击这篇文章:《JavaWeb中JavaMail创建邮件和发送邮件》

关于JavaWeb实现邮件发送接收功能的内容就这么多。


推荐阅读
  • java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
    一、根据题意,填写出空格中的内容Java平台包括三个技术方向,其中J2ME代表____________、J2SE代表___________、J2EE代表 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • PHP小习题:PHP小练习题前几天在百度知道里面看到有位网友询问如何制作一下的小程序:用php语言设计一个小程序,计算今天到达下月的天数、全部输出这些天数,并使得每天的日期以三种颜 ... [详细]
  • java io换行符_Java IO:为什么从stdin读取时,换行符的数字表示出现在控制台上?...
    只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:publicstaticvoidmain(String[]args)thro ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
author-avatar
淘宝休丶闲女-装店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有