Java通过JavaMail发送邮件功能

 更新时间:2022年08月11日 08:48:22   作者:热水得加糖  
这篇文章主要为大家详细介绍了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("邮件发送成功");

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot加载多个配置文件实现dev、product多环境切换的方法

    SpringBoot加载多个配置文件实现dev、product多环境切换的方法

    这篇文章主要介绍了SpringBoot加载多个配置文件实现dev、product多环境切换,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • IDEA利用jclasslib 修改class文件的实现

    IDEA利用jclasslib 修改class文件的实现

    这篇文章主要介绍了IDEA利用jclasslib 修改class文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • SpringBoot HikariCP连接池详解

    SpringBoot HikariCP连接池详解

    这篇文章主要介绍了SpringBoot2.0 中 HikariCP 数据库连接池原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • springboot的控制反转和自动装配示例代码

    springboot的控制反转和自动装配示例代码

    这篇文章主要介绍了springboot的控制反转和自动装配的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • MybatisPlus中如何调用Oracle存储过程

    MybatisPlus中如何调用Oracle存储过程

    这篇文章主要介绍了MybatisPlus中如何调用Oracle存储过程的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 使用MyBatis-Plus实现联表查询分页的示例代码

    使用MyBatis-Plus实现联表查询分页的示例代码

    本文主要讲述了如何在SpringBoot项目中使用MyBatis-Plus的分页插件,通过这个示例,可以学会如何利用MyBatis-Plus进行高效的分页查询,感兴趣的可以了解一下
    2024-10-10
  • Jenkins Maven pom jar打包未拉取最新包解决办法

    Jenkins Maven pom jar打包未拉取最新包解决办法

    包版本号未变更新后,jenkins打包不会拉取最新包,本文主要介绍了Jenkins Maven pom jar打包未拉取最新包解决办法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Spring如何通过@Lazy注解解决构造方法循环依赖问题

    Spring如何通过@Lazy注解解决构造方法循环依赖问题

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环,这篇文章主要给大家介绍了关于Spring如何通过@Lazy注解解决构造方法循环依赖问题的相关资料,需要的朋友可以参考下
    2023-03-03
  • java中struts 框架的实现

    java中struts 框架的实现

    本文给大家介绍的是java中struts 框架的实现,有需要的小伙伴可以参考下。
    2015-06-06
  • Java Proxy机制详细解读

    Java Proxy机制详细解读

    这篇文章主要介绍了Java Proxy机制详细解读,还是非常不错的,这里分享给大家,需要的朋友可以参考下。
    2017-10-10

最新评论