Java通过JavaMail发送邮件功能
作者:热水得加糖 发布时间:2022-09-07 16:47:20
标签:Java,JavaMail,发送邮件
本文实例为大家分享了Java通过JavaMail发送邮件的具体代码,供大家参考,具体内容如下
这里我用的是SpringBoot项目
1、引入相关jar包
<!--java-email-->
? <dependency>
? ?<groupId>com.sun.mail</groupId>
? ?<artifactId>javax.mail</artifactId>
? ?<version>1.6.2</version>
</dependency>
2、将QQ邮箱的POP3/SMTP服务打开(其他邮箱自行百度,个别邮箱跳过)
3、创建邮件发送属性
邮件发送服务器:QQ邮箱:smtp.qq.com,其他邮箱服务器地址自行百度
16位授权码:16位授权码可有多个,个别邮箱可直接用密码代替(本人用的免费的企业邮箱,可直接用密码登录)
Properties prop = new Properties();
//设置邮件服务器
prop.setProperty("mail.host", "smtp.qq.com");
// 邮件发送协议
prop.setProperty("mail.transport.protocol", "smtp");
// 需要验证用户名密码
prop.setProperty("mail.smtp.auth", "true");
// 邮箱设置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//1、创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getDefaultInstance(prop, new Authenticator() {
? ? ? ? ? ? @Override
? ? ? ? ? ? protected PasswordAuthentication getPasswordAuthentication() {
? ? ? ? ? ? ? ? //传入发件人账号和授权码
? ? ? ? ? ? ? ? return new PasswordAuthentication("1825508930@qq.com", "16位授权码");
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? //2、通过session获取transport对象
? ? ? ? Transport transport = session.getTransport();
? ? ? ? //3、通过transport对象设置发件账号和授权码连接邮箱服务器
? ? ? ? transport.connect("smtp.qq.com", "1825508930@qq.com", "16位授权码");
4、设置邮件内容
图片
MimeBodyPart image = new MimeBodyPart();
DataHandler handler = new DataHandler(new FileDataSource("本地文件路径"));
image.setDataHandler(handler);
//设置图片id
image.setContentID("test.jpg");
//准备文本
MimeBodyPart text = new MimeBodyPart();
//通过cid:图片id设置文件路径
text.setContent("<h1>测试图片</h1><img src='cid:test.jpg' width='100' height='100'>", "text/html;charset=utf-8");
附件
MimeBodyPart appendix = new MimeBodyPart();
appendix.setDataHandler(new DataHandler(new FileDataSource("本地文件路径")));
appendix.setFileName("test.txt");
将图片附件存入邮件中并发送
//拼装邮件正文
MimeMultipart mimeMultipart = new MimeMultipart();
//将设置的图片放入邮箱
mimeMultipart.addBodyPart(image);?
?mimeMultipart.addBodyPart(text);
//文本和图片内嵌
mimeMultipart.setSubType("related");
?
//将拼装好的正文内容设置为主体
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(mimeMultipart);
?
//拼接附件
MimeMultipart allFile = new MimeMultipart();
//附件
allFile.addBodyPart(appendix);
//正文
allFile.addBodyPart(contentText);
//正文和附件都存在邮件中,所有类型设置为mixed
allFile.setSubType("mixed");
//放到Message消息中
mimeMessage.setContent(allFile);
//保存修改
mimeMessage.saveChanges();
//发件人邮箱(必须)、别称(可忽略)
mimeMessage.setFrom(new InternetAddress("1825508930@qq.com", "别称"));
?
//5、发送邮件(如果需要群发的话,为了保护隐私就不推荐使用mimeMessage.addRecipients(),会将所有收件人一同展示出来,建议循环使用mimeMessage.setRecipients进行发送)
//设置收件人
?mimeMessage.setRecipients(Message.RecipientType.TO, "123456@qq.com");
//发送
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
?//6、关闭连接
transport.close();
log.info("邮件发送成功");
来源:https://blog.csdn.net/qq_40735602/article/details/118965999


猜你喜欢
- 前言Date 类Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。构造方法
- 1.MyBatis简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的
- Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。
- WebService是一种传统的SOA技术架构,它不依赖于任何的编程语言,也不依赖于任何的技术平台,可以直接基于HTTP协议实现网络应用间的
- PhotoView的简介:这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点击放大缩小。支持在ViewPager中翻页浏
- 本文通过两个方法:(1)计算总的页数。 (2)查询指定页数据,实现简单的分页效果。思路:首先得在 DAO 对象中提供分页查询的方法,在控制层
- Maven打包没有指定主类在使用IDEA开发项目的时候经常会遇到使用Maven打包项目(打成jar包或者zip包),但是之前不太清楚打包插件
- 项目要求基于Broadcast,BroadcastReceiver等与广播相关的知识实现简单的音乐播放功能,包括音乐的播放、暂停、切换、进度
- 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。public class Sa
- 本文实例为大家分享了Java实现图形界面计算器的具体代码,供大家参考,具体内容如下 代码:import javax.swing.*
- 本文实例为大家分享了banner轮播图无限轮播效果的具体代码,供大家参考,具体内容如下效果展示第一步(权限配置)<uses-permi
- mybatis-plus想要修改某字段为null问题场景使用mybatis + mybatisPlus进行修改某字段,想要将其设为null,
- 对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收;而使用的内存是由JVM控制的。那么,什么
- 如何将jar包打包到指定目录今天分享一下springboot将jar包打包到指定目录下。由于之前上线都是一个打包到一个jar,由于服务多了,
- 前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法:具体实例代码如下:public cl
- java Class.getSimpleName() 的用法Usage in android:private static final St
- 对于int,double等的tostring:C 货币 2.5.ToString("C
- 1、System.Threading.Timer 线程计时器1、最底层、轻量级的计时器。基于线程池实现的,工作在辅助线程。2、它并不是内在线
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 通过这篇文章通过实例代码向大家介绍了Spring实例化bean的几种方法,接下来看看具体内容吧。1.使用类构造器实现实例化(bean的自身构