使用java实现BBS论坛发送邮件过程详解

 更新时间:2021年04月13日 17:22:21   作者:狗哥狗弟齐头并进  
这篇文章主要介绍了使用java发送邮件过程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

SpringBoot实践,开发社区登录模块今日份开启 发送邮件三个步骤:

1、邮箱设置

首先需要注册一个新浪邮箱 18215626061@sina.cn

然后进入设置开启POP3/SMTP服务,务必记住授权码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

左下角点开启

2、Spring Email

导入jar包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.4.4</version>
</dependency>

然后在IDEA中的application中配置邮箱的相关设置

可以创建.properties也可以创建.yaml。分别如下:

在这里插入图片描述

在这里插入图片描述

此处password为授权码 有的邮箱的密码需要隐匿的设置为授权码,否则会错误,这里不用授权码的话可以换回密码。

这里我们创建一个util包,然后创建MailClient类,这里因为发邮件的时候是要委托新浪邮箱,所以这里是一个Client类。来进行委托的业务处理。

此处用到的最关键的核心组件是:

JavaMailSender

JavaMailSender

JavaMailSender

我自己记不住,所以多些几遍加深记忆。 Java实现发送email用到的是与邮件发送相关的类,那么就是MailSender类。

发送邮件涉及的关键字:发送人,发送到哪里(To),邮件主题,还有邮件内容。分别用(from,to,subject,context)表示。

JavaMailSender的源码如下

在这里插入图片描述

可以看到第一步是有一个MimeMessage所以看如下代码

@Component
public class MailClient {
private staticfinal Logger logger= LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
public voidsendMail(String to,String subject,String context){
     try {
      MimeMessage message= javaMailSender.createMimeMessage();
      MimeMessageHelper helper = new MimeMessageHelper(message);
      helper.setFrom(from);
      helper.setTo(to);
      helper.setSubject(subject);
      helper.setText(context,true);//不加true表示是默认文本,加了true表示支持html文本
      javaMailSender.send(helper.getMimeMessage());
      } catch (MessagingException e) {
        logger.error("发送邮件失败"+e.getMessage());
       }
   }
}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
    @Autowired
    private MailClient mainClient;
    @Test
    public void  testTextMail(){
        mainClient.sendMail("596844484@qq.com","java yyds", "Welcome");
    }
}

然后果不其然出现了错误

然后果不其然出现了错误

然后果不其然出现了错误

在这里插入图片描述

产生这个错误的原因去查了查是因为授权码的问题,解决这个问题可以阅读文章末尾补充文章

然后经过种种我把新浪微博换成了网易163的邮箱

在这里插入图片描述

并按照解决办法去修改。测试成功

在这里插入图片描述

3、使用Thymeleaf模板发送html文本

先写一个html文件

在这里插入图片描述

在这里插入图片描述

附上代码

@Autowired
private TemplateEngine templateEngine;
@Test
//注意这里的Context 是Thymeleaf下的
public void testTextMailHtml(){
  Context context=new Context();
  context.setVariable("username", "小傻瓜"); //从这里取值
  String process = templateEngine.process("/mail/demo", context);
  System.out.println(process);
  mailClient.sendMail("18215626061@sina.com","java yyds", "Welcome");
}

在这里插入图片描述

下面让我们想一想开始发邮箱时的为什么会报错。

报错信息如下图:

查了查资料,才发现,如果是163邮箱发送邮件,password配置的需要是163的授权码。如下图:

这样就解决了报错问题。

以上就是使用JavaMailSender发送邮箱的过程。欢迎各位读者指正。更多关于java的资料请关注脚本之家其它相关文章!,希望大家以后多多支持脚本之家!

相关文章

  • Java中使用qsort对类进行排序的操作代码

    Java中使用qsort对类进行排序的操作代码

    这篇文章主要介绍了JAVA中如何使用qsort对类进行排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java SSH 秘钥连接mysql数据库的方法

    Java SSH 秘钥连接mysql数据库的方法

    这篇文章主要介绍了Java SSH 秘钥连接mysql数据库的方法,包括引入依赖的代码和出现异常报错问题,需要的朋友可以参考下
    2021-06-06
  • Java中int和Integer的区别

    Java中int和Integer的区别

    这篇文章主要介绍的是 Java中int和Integer的区别,Java 是一种强数据类型的语言,因此所有的属性必须有一个数据类型,下面文章基于Java详细int和Integer有何区别,需要的朋友可以参考一下
    2021-11-11
  • 详解Java如何利用数字描述更多的信息

    详解Java如何利用数字描述更多的信息

    在数据库里面 ,通常我们会用数字的递进来描述状态等信息 , 但是如果想进行更复杂的操作 , 就有必要对二进制有一定理解了。本文就来趣味性的探讨一下 , 如何通过更少的空间描述更多的信息
    2022-09-09
  • 解决cmd运行java程序“找不到文件”提示的方案

    解决cmd运行java程序“找不到文件”提示的方案

    在本篇文章里小编给大家分享的是关于解决cmd运行java程序“找不到文件”提示的方案,有需要的朋友们可以参考下。
    2020-02-02
  • Java实现商品的查找、添加、出库、入库操作完整案例

    Java实现商品的查找、添加、出库、入库操作完整案例

    这篇文章主要介绍了Java实现商品的查找、添加、出库、入库操作,结合完整实例形式分析了java基于面向对象的商品信息添加、删除、查找等相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • Java forEach对原数组的操作过程

    Java forEach对原数组的操作过程

    forEach对于基本数据类型,是直接赋值,对于引用数据类型,是引用地址值,forEach遍历时,是创建的临时变量,引用的数据地址,本文给大家介绍Java forEach对原数组的操作过程,感兴趣的朋友一起看看吧
    2024-02-02
  • SpringBoot使用minio及配置代码

    SpringBoot使用minio及配置代码

    MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。本文重点给大家介绍SpringBoot使用minio及配置代码,感兴趣的朋友一起看看吧
    2022-02-02
  • SpringBoot整合SpringSecurityOauth2实现鉴权动态权限问题

    SpringBoot整合SpringSecurityOauth2实现鉴权动态权限问题

    这篇文章主要介绍了SpringBoot整合SpringSecurityOauth2实现鉴权-动态权限,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Leetcode常见链表问题及代码示例

    Leetcode常见链表问题及代码示例

    这篇文章主要介绍了Leetcode常见链表问题及代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论