JavaMail相关代码案例(详解)

学习Java发送邮件,必然会涉及到的一个术语就是SMTP,而且在邮箱中设置SMTP的时候我们还会看到另外两个术语:POP3和IMAP

简单的说,这三个都是邮件收发相关的三种协议。

  • SMTP:全称是“Simple Mail Transfer Protocol”,简单邮件传输协议,它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。用于发送电子邮件的传输协议;
  • POP3:全称是"Post Office Protocol 3",是邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。用于接收电子邮件的标准协议;
  • IMAP:全称是"Internet Mail Access Protocol",即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作,是POP3的替代协议。

JavaMail是Oracle官方提供的一组API库,并没有包含在标准的JDK中,使用时需要我们自己导入架包

一般分为如下步骤

  1. 邮件服务器主机
  2. 传输协议SMTP
  3. 邮箱认证授权
  4. 发件人地址
  5. 收件人地址
  6. 收件人邮箱
  7. 邮件主题
  8. 邮件内容
1.创建邮件服务器主机
Properties props = new Properties();// 创建Properties对象,相当于SMTP服务器对象
props.put("mail.smtp.host", "smtp.163.com"); // SMTP主机名
props.put("mail.smtp.port", "25"); // 主机端口号
props.put("mail.smtp.auth", "true"); // 是否需要用户认证
props.put("mail.smtp.startls.enable", "true"); // 启用TLS加密
2.邮箱认证授权
// 参数1:服务器连接参数
// 参数2:账号和密码的授权认证对象
Session session = Session.getInstance(props, new Authenticator() {

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName, password);
	}
});
3.发送邮件
  • 发送邮件时需要创建一个Message对象
  • 需要设置发送方的地址
  • 设置接受方的地址
  • 设置邮件主题
  • 设置邮件正文
  • 最后发送
Message message=new Message(session);//发送邮件时需要创建一个Message对象
message.setFrom(new InternetAddress("18292285065@163.com")); // 发件方地址
message.setRecipient(RecipientType.TO, new InternetAddress("2273957338@qq.com"));// 收件方地址
message.setRecipients(RecipientType.CC, new InternetAddress[] { new InternetAddress("2232266959@qq.com"),
					new InternetAddress("2232266959@qq.com") });// 群发(抄送)
message.setSubject("测试文件"); // 设置邮件标题
Transport.send(message);// 发送邮件

说明

  • RecipientType.TO —> 单发,发送方为一个
  • RecipientType.CC ----> 群发(抄送),发送方为多个
4.发送带正文和附件的邮件
  • 设置正文部分
BodyPart textPart = new MimeBodyPart();
textPart.setContent("用<b>测试文件</b>", "text/html;charset=utf-8");

如果正文中带有html标签的字段,需要在设置正文内容时加上“text/html;charset=utf-8”,表示该文本是超文本格式,并使用utf-8进行编码

  • 设置附件内容
BodyPart filePart = new MimeBodyPart();
filePart.setDataHandler(new DataHandler(
    new ByteArrayDataSource(
		Files.readAllBytes(Paths.get("E:\\APESOURCE\\评论页面\\img\\bj.jpg")), "application/octet-stream")));

注意:

添加附件时,不能直接使用message.setText() 方法,而是需要创建一个Multipart对象

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
  • 将组装完成的multipart对象放到message中
message.setContent(multipart);
  • 完成这些操作后即可发送
Transport.send(message);
5发送内嵌图片的HTML文件
Multipart multipart = new MimeMultipart();
// 正文部分
BodyPart textPart = new MimeBodyPart();
StringBuffer contentPart = new StringBuffer();
contentPart.append("用<b>测试文件</b>");
contentPart.append("<img src=\"cid:pinglun\">");
textPart.setContent(contentPart.toString(), "text/html;charset=utf-8");

// 附件部分
BodyPart imagePart = new MimeBodyPart();
// 设置文件类型
imagePart.setDataHandler(new DataHandler(
		new ByteArrayDataSource(
				Files.readAllBytes(Paths.get("E:\\APESOURCE\\评论页面\\img\\bj.jpg")),
							"application/octet-stream")));

// 设置当前图片为内嵌图片
imagePart.setHeader("Content-ID", "pinglun"); // 图片的内容ID
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kⅈꫛᧁ269

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值