JavaSE:JavaMail笔记

本文介绍了SMTP和POP3邮件协议的基本概念及对应的服务器角色,详细解析了如何使用Java进行邮件的手动发送与接收操作,并提供了自定义Java类实现邮件发送及使用JavaMail_API开发邮件发送程序的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、邮件协议:
1.SMTP为邮件传输协议,相应的服务器为邮件发送服务器(SMTP服务器)
SMTP服务器处理邮件发送

2.POP3为邮件接收协议,相应的服务器为邮件接收服务器(POP3服务器)
POP3服务器处理邮件接收

3.协议对应端口
HTTP:80
HTTPS:443
SMTP:25
POP3:110

4.创建邮件的协议
RFC822文档:简单邮件
MIME协议(对RFC822文档的升级和补充,又称MIME邮件,MIME协议描述的数据称为MIME消息,为复杂邮件):
MIME协议常用头字段:
Content-type头字段
数据关系
multipart/mixed,
multipart/related,
multipart/alternative,
Content-Disposition头字段(用于指定邮件阅读程序处理数据内容的方式)


二、通过Telnet手动发送和接收邮件:

1.建一个java类,对用户名与密码进行编码
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()));

2.利用telnet连接smtp.sohu.com服务器发送邮件
打开cmd,输入telnet smtp.sohu.com 25 回车
ehlo 用户名     //随便输入用户名
auth login      //登陆标记
输入编码后的用户名   //在网上注册的邮件用户名,用B64编码后的值输
输入编码后的密码     //在网上注册的邮件密码,用B64编码后的值输
mail from:<email邮箱> //要输入该服务器注册的email
rcpt to:<email邮箱>   //接收人的真实email
data     //输入搞回车后开始写内容
from:<发送者email>   
to:<接收者email>
cc:<抄送者email>
bcc:<暗送者email>   //不会显示发送人的email
subject:主题
空一行
内容               //这里输入发送的内容
.                  //说明内容写完了
quit               //退出服务器连接

3.利用telnet连接smtp.sohu.com服务器接收邮件
user 用户名   //网上注册的用户名
pass 密码     //网上注册的密码
stat         //返回邮箱的统计信息
list         //返回某一封邮件的统计信息
retr        //最重要的一个命令
quit        //退出服务器连接


三、邮件发送程序开发:

(1)自已建java类连接邮件服务器并发送邮件
Socket sock = new Socket("smtp.sohu.com",25);
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
OutputStream out = sock.getOutputStream();
System.out.println(in.readLine());
out.write("ehlo wangwu\r\n".getBytes());
System.out.println(in.readLine());
System.out.println(in.readLine());
System.out.println(in.readLine());
out.write("auth login\r\n".getBytes());
System.out.println(in.readLine());
out.write("编码后的用户名\r\n".getBytes());
System.out.println(in.readLine());
out.write("编码后的密码\r\n".getBytes());

(2)用apache开发的JavaMail_API开发邮件发送程序
1.导包:activation.jar和mail.jar

2.建一个类,用于生成一封带图片的邮件
Session session = Session.getDefaultInstance(new Properties());
MimeMessage message = new MimeMessage();   //MimeMessage类表示整封邮件
message.setFrom(new InternetAddress("aaa@126.com")); //设置
message.setRecipient(Message.RecipientType.TO,new InternetAddress("bbb@126.com"));
message.setSubject("邮件标题");
//正文数据
MimeBodyPart text = new MimeBodyPart();   //MimeBodyPart类表示邮件的一个MIME消息
text.setContent("正文内容<img src='cid:图片ID'>","text/html");
//正文图片
MimeBodyPart image = new MimeBodyPart();
//附件
MimeBodyPart attach = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("附件路径"));
attach.setDataHandler(dh);
attach.setFileName();
//将图片和数据处理器相关联
DataHandler dh = new DataHandler(new FileDataSource("图片路径"));
image.setDataHandler(dh);
image.setContentID("该图片ID");
//描述正文文字与正文图片之关的关系
MimeMultipart mm = new MimeMultipart();  //MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("telated");  //正文图片
mm.setSubType("mixed");    //附件
//把容器加到邮件中
message.setContent(mm);
message.saveChanges();
//看效果
message.writeTo(new FileOutputStream("c:\\1.eml"));

3.发送生成的邮件

四、邮件接收程序开发:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值