如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。
————tigers20010
今日是JAVAWEB最后一课,JAVAMAIL。E-mail在当今的日常生活中已经成为人们重要的通信方式之一,在WEB应用中E -mail被做为与用户通信的最重要方式。如今各大综合性网站都有提供自己的mail服务,企业或各其他专业性网站也有自己的内部mail服务器,天于为工作交流与合作。所以,学习E-mail技术是十分重要的!
一、邮件传输协议:
有使用过桌面邮件客户端的人都知道,关联一个邮件帐户,需要设置它的SMTP邮件发送服务器和POP3邮件接收服务器。
SMTP和POP3协议到底是什么?(老方的图片):
[img][/img]

1. 实线部分(lisi@sina.com向wangwu@sohu.com发送邮件):
使用邮件客户端(这里使用的是OutLook,也可以是网页邮件客户端或其他邮件客户端),使用SMTP协议向sina的邮件服务器发送邮件,服务器检测收件人的邮箱地址是sohu的邮件服务。所以,通过SMTP协议转发给sohu服务器,sohu服务器将邮件存储到存储设备中。
2. wangwu@sohu.com,登陆邮件客户端。通过pop3协议,从POP3服务器接收自己帐户的邮件。POP3从邮件服务器中读取邮件发送给客户端。
3. 虚线部分(wangwu@sohu.com向lisi@sina.com发送邮件)
过程与上边的相同。
二、使用windwos的控制台发送邮件(SMTP协议):
1.注册一个邮件帐户,比如:test@gmail.com。
2.在运行中输入“cmd”打开控制台程序。
3.输入:telnet smtp.google.com 25,回车。使用windows的telnet程序连接gmail的邮件发送服务器,SMTP的默认端口为25。
4.输入:auth login,回车。登陆。
5.输入:(test)用户名,必须是经过Base64编码后的文本。
6.输入:密码,必须是经过Base64编码后的文本。
7.输入:mail from:<test@gmail.com>,回车。邮件开自,这里是自己给自己发邮件,也可以是其他邮件。
8.输入:rcpt to:<test@gmail.com>,回车。邮件发送到。
9.输入:Data,回车。接下来要输入邮件内容。
10.输入:邮件内容,回车。
11.输入:.,回车。(空行中的点,代表内容结束)
12.输入:quit,回车。退出!
Ok,邮件发送成功!
三、使用windows控制台接收邮件(POP3协议):
1.在运行中输入“cmd”打开控制台程序。
2.输入:telnet pop3.gmail.com 110,回车。使用windows的telnet程序连接gmail的邮件接收服务器,POP3的默认端口为110。
3.输入:user test,回车。这里的用户名不需要Base64编码。
4.输入:pass密码,回车。这里的密码不需要Base64编码。
5.输入:stat,回车。显示邮箱的状态:邮件的数量和总大小。
6.输入:list,回车。索引列出各邮件,显示邮件的索引和大小。
7输入:retr index,回车。这是最重要的一条命令,显示批定索引的邮件。
8.输入:quit,回车。退出!
OK,邮件接收成功!
四、创建邮件RFC822文档:
n RFC32文档规定了如何编写一封简单的邮件:
n 邮件头和邮件体,两者使用空行分隔。
n 邮件头:
u From字段,此处可以随便填写,比如发送冒充邮件。也有一些邮件服务器为此进行了检查。
u To字段
u Subject字段,标题。
u Cc、bcc字段,抄送和密送。
n 邮件体:邮件内容
上边的这些内容可以加在Data输入之前,进行设置。这样邮件就可以看到标题来自、以及抄送等内容。
Windows的OutLook邮件客户端,只能接收使用RFC822规范创建的邮件,否则查询邮件各项参数和内容都为空。
五、创建邮件的MIME协议:
1.MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。
2.对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用容器对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件)
MIME协议十分经典,WEB应用中使用的文件上传正是此协议!
六、协议中的字段
1. Content-type字段:
数据类型 video:
以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、multipart、message等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包含plain、html、xml、css等子类型。
数据的关系:
multipart/mixed、multipart/related、multipart/alternative
2. Content-Disposition头字段:
Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inline和attachment两种标准方式,inline表示直接处理,而attachment表示当作附件处理。如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示:
Content-Disposition: attachment; filename=“1.bmp”
上面的MIME头字段表示MIME消息体的内容为邮件附件,附件名“1.bmp”。
3.Content-ID头字段
Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为如下形式:
Content-ID: it315logo_gif
那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:
<img src="cid:it315logo_gif">
注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。
七、发送最复杂邮件的程序
下面,我们来看一个发送最复杂的邮件程序(发送:文本内容、图片、附件):
import java.util.Properties;
import javax.activation.*;
import javax.mail.*;
import javax.mail.Message.RecipientType;
import javax.mail.internet.*;
public class MySmtp {
public static void main(String[] args) throws Exception {
String host = "smtp.google.com";
String from = "test@gmail.com";
String username = "test";
String password = "123456";
// 设置邮件的参数,根据参数生成会话。
Properties prop = new Properties();
prop.setProperty("mail.host", host);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(prop);
session.setDebug(true);
// 获取邮件内容
MimeMessage message = getMessage(from, from);
// 连接服务器,发送邮件
Transport ts = session.getTransport();
ts.connect(username, password);
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
// 此方法生成邮件的内容
private static MimeMessage getMessage(String from, String recipient) throws Exception{
MimeMessage message = new MimeMessage(Session
.getDefaultInstance(new Properties()));
message.setFrom(new InternetAddress(from));
message.setRecipient(RecipientType.TO, new InternetAddress(
recipient));
message.setSubject("把这功能学会了,就能发世界上最难的邮件!");
// 邮件中的文本内容
MimeBodyPart mbpText = new MimeBodyPart();
mbpText.setContent("我是邮件的内容,可以显示图片哦!<img src='cdi:test.jpg'>", "text/html;charset=UTF-8");
// 邮件中的图片
MimeBodyPart mbpImage = new MimeBodyPart();
DataHandler dhImage = new DataHandler(new FileDataSource("C:/test.jpg"));
mbpImage.setDataHandler(dhImage);
mbpImage.setContentID("test.jpg");
// 邮件中的附件
MimeBodyPart mbpAttmen = new MimeBodyPart();
DataHandler dhAttmen = new DataHandler(new FileDataSource("C:/test.txt"));
mbpAttmen.setDataHandler(dhAttmen);
// 邮件中在文本内容和附件路径会出现中文乱码,所以使用MimeUtility进行编码。
mbpAttmen.setFileName(MimeUtility.encodeText(dhAttmen.getName()));
// 将图片与文本内容放到一个单元里
MimeMultipart mm1 = new MimeMultipart();
mm1.addBodyPart(mbpText);
mm1.addBodyPart(mbpImage);
// 描述正文和图片的关系
mm1.setSubType("related");
// 返回需要将附加与文本和图片添加到一个单元里。
// MimeMultipart不能添加MimeMultipart,但可以添加MimeBodyPart。
MimeBodyPart text_img = new MimeBodyPart();
text_img.setContent(mm1);
// 将文本、图片与附件添加到一个单元里
MimeMultipart mm2 = new MimeMultipart();
mm2.addBodyPart(mbpAttmen);
mm2.addBodyPart(text_img);
mm2.setSubType("mixed");
// 将内容添加到message中
message.setContent(mm2);
message.saveChanges();
return message;
}
}
参照上面的代码,来看一下相关API的关系图(老方的):

l MimeMessage类表示整封邮件。
l MimeBodyPart类表示邮件的一个MIME消息。
l MimeMultipart类表示由多个MIME消息组合成的一个组合MIME消息。
六、三大功能类
JavaMail API按其功能划分通常可分为如下三大类:
l 创建和解析邮件内容:Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
l 发送邮件:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
l 接收邮件:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
l Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
Ok了!今天下午的时候终于抽出点时间大家一起合个影。今天也是方老师最后一天的课程,大家都十分喜欢他,祝他身体健康,工作愉快!
分享到:
相关推荐
55links友情链接网址跟踪器,放在桌面,每次直接打开就可以访问55links友情链接交易平台,方便快捷。
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
moore_01_0909
FIBR English learning
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
OIF_IEEE802.3_liaison_19OCt09
做网络安全FTP内容的实验必备
nagarajan_01_1107
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
mellitz_3cd_01_0318
PyQt6实战派 配套代码
陕西省省级非物质文化遗产经纬度数据统计表 统计内容包含以下字段: 1. 项目名称 2. 遗产类别 3. 入选批次 4. 所属地区 5. 申报地区/单位 6. 地理经度 7. 地理纬度 该统计表系统记录了陕西省省级非物质文化遗产的地理空间信息,为文化遗产的数字化保护与研究工作提供了重要的数据支撑。
ran_3ck_02a_0918
毕业设计_基于springboot+vue开发的汽车租赁管理系统【源码+sql+可运行】【50308】.zip 全部代码均可运行,亲测可用,尽我所能,为你服务; 1.代码压缩包内容 代码:springboo后端代码+vue前端页面代码; 脚本:数据库SQL脚本 效果图:运行结果请看资源详情效果图 2.环境准备: - JDK1.8+ - maven3.6+ - nodejs14+ - mysql5.6+ - redis 3.技术栈 - 后台:springboot+mybatisPlus+Shiro - 前台:vue+iview+Vuex+Axios - 开发工具: idea、navicate 4.功能列表 - 系统设置:用户管理、角色管理、资源管理、系统日志 - 业务管理:汽车管理、客户管理、租赁订单 3.运行步骤: 步骤一:修改数据库连接信息(ip、port修改) 步骤二:找到启动类xxxApplication启动 4.若不会,可私信博主!!!
# Runcorder - 跑步训练管理系统 Runcorder 是一款专为跑步爱好者、马拉松运动员及高校体育生设计的本地化跑步训练管理工具,基于 Python 开发,结合 Tkinter 图形界面与强大的数据处理能力,为用户提供从训练记录到数据分析的全方位支持。无论是初学者还是专业跑者,Runcorder 都能帮助你科学规划训练、精准追踪进度,并通过可视化图表直观呈现训练成果,让你的跑步训练更智能、更高效! - **多用户管理**:支持创建、加载和删除用户档案,每个用户的数据独立存储,确保隐私与安全。 - **科学训练记录**:全维度记录跑步数据,包括日期、里程、配速、自评和晨跑标记,支持智能输入校验,避免数据错误。 - **多维数据分析**:通过动态可视化图表展示跑步里程趋势、平均配速曲线,支持自定义 Y 轴范围,帮助用户深入理解训练效果。 - **高阶功能**:提供 4 种科学训练模式(有氧/无氧/混合),支持历史记录修改与删除,数据以 JSON 格式持久化存储,跨平台兼容。
paatzsch_01_0708
AnythingLLM是一个全栈应用程序,您可以使用流行的开源大语言模型,再结合向量数据库解决方案构建个人本地AI大模型知识库
mellitz_3ck_02_0519
petrilla_01_0708
ran_3ck_01_0918