首页 > 编程语言 >java 发送邮件

java 发送邮件

时间:2022-11-03 10:39:05浏览次数:43  
标签:java String helper templateResolver spring 发送 mail 邮件


可能有人会说了,发送邮件多么简单,我单手十分钟就可以写完。大佬避让,我是萌新,所以发送邮件也从最简单的说起。

因为本人是在springboot中发送邮件,所以采用spring提供的邮件解决方案,在maven中引入:

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

根据springboot自动配置的特性,此时邮件其实就已经可以用了,但是我们知道,发送邮件肯定需要smtp服务,所以在发送之前,还得配置上自己的smtp服务的信息。

spring.mail.host=smtp.qq.com
spring.mail.port=25
[email protected]
spring.mail.password=********
spring.mail.protocol=smtp

这里我使用的是qq邮箱提供的smtp服务,最好不要自己搭建邮件服务器,因为肯定会被扔进垃圾箱里面。
然后,就可以使用下面的代码直接发送邮件了。

MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg);
helper.setFrom(from);
helper.setTo(email);
helper.setSubject(subject);
helper.setText(contant);
javaMailSender.send(msg);

当然,如果你不满足于发纯文本的邮件,也可以接着看下面的内容,引入 thymeleaf

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

用thymeleaf来做模板,我们可以发送html给用户。例如,我要发送一个验证码给用户

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<div>
<span>发给您的验证码为</span>
</div>
<div>
<h2 th:text="${code}"></h2>
</div>
</body>
</html>

这里 th:text="" 是thymeleaf里面的语法,语法简单,容易上手。
然后,在服务中调用的方式为:

@Service
public class SendEmailServiceImpl implements SendEmailService {


private static final String EMAIL_TEMPLATE_ENCODING = "UTF-8";

@Autowired
MathematicalService mathematicalService;

@Autowired
private JavaMailSender javaMailSender;

@Autowired
private TemplateEngine templateEngine;

@Value("${spring.mail.username}")
String from;

@Override
public String sendEmail(String email, String subject) throws MessagingException {
String code = mathematicalService.getVerificationCode();
try {
synchronized (this){
if (!templateEngine.isInitialized())templateEngine.addTemplateResolver(htmlTemplateResolver());
}
}catch (Exception ex){
ex.printStackTrace();
}
final Context context = new Context();
context.setVariable("code", code);
final String contant = templateEngine.process("mail/VerificationCode", context);
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setFrom(from);
helper.setTo(email);
helper.setSubject(subject);
helper.setText(contant, true);
javaMailSender.send(msg);
return code;
}


private synchronized ITemplateResolver htmlTemplateResolver() {
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setOrder(Integer.valueOf(2));
templateResolver.setResolvablePatterns(Collections.singleton("mail/*"));
templateResolver.setPrefix("/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding(EMAIL_TEMPLATE_ENCODING);
templateResolver.setCacheable(false);
return templateResolver;
}
}

你也可以写更复杂的html给用户,详情可以参考thymeleaf官网文档中的方法。


标签:java,String,helper,templateResolver,spring,发送,mail,邮件
From: https://blog.51cto.com/u_14196886/5819057

相关文章

  • java 简单使用线程池
    定义一个ThreadPoolExecutorprivatefinalBlockingQueue<Runnable>taskQueue=newLinkedBlockingDeque<>();privatefinalThreadPoolExecutorexecutor=newThreadPo......
  • Java基础Day6-面向对象
    一、面向对象编程(Object-OrientedProgramming,OOP)面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。从认识论的角度:先有对象后有类。对象是具体的......
  • springboot javax.servlet.Filter使用
    请求拦截器优点:1、拦截非法请求重定向2、验证用户token下面是demo程序,有问题的可以在评论区留言@WebFilter(filterName="authenticationFilter",urlPatterns={"/user/*......
  • 用 java 简单实现 rpc 通信
    代码不一定能够运行起来,这是在之前的代码中抽象出来的。这里只是说说基本的思路定义消息:packagecom.xiaoyao.game.net.framework.codec;importcom.google.protobuf.Messa......
  • 力扣1668(java&python)-最大重复子字符串(简单)
    题目:给你一个字符串 sequence ,如果字符串word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word的重复值为k。单词word 的最大重复值......
  • Java高级架构师-Java基础(集合)
    Java高级架构师-Java基础(集合)集合框架Java.util.CollectionCollection接口中的共性功能1.添加boobleanadd(Objectobj);往该集合中添加元素,一次添加一个bo......
  • Java中“成员变量,局部变量,静态变量”三者区别说明
    转自:http://java265.com/JavaCourse/202111/1728.html下文笔者讲述java中成员变量,局部变量,静态变量的不同之处,如下所示: 成员变量局部变量静态变量定义位置......
  • java命令行如何编译运行带package(包)的程序
    先用javac编译,带参数-djavac-d.****.java 然后,在当前目录下(不要到****子目录),运行java即可。java***.*****如:javac-d.FuctionDemo2.javajavacom.Fuct......
  • 开发语言介绍——Java
    开发语言介绍——Java一、基本说明1.Java语法的特点关键字都是小写字母标识符没有长度限制使用Unicode编码Java是一种强类型的语言,变量在编译之前一定要被显示的声明......
  • 如何从 Java 的 List 中删除第一个元素 remove
    如何从Java的List中删除第一个元素remove概述在这个实例中,我们将会演示如何删除在Java中定义的List的第1个元素。我们将会针对这个问题使用List接口的......