目录
2.创建email实体类,emailService业务类以及实现类
一、引言
在数字化时代,电子邮件已经成为我们日常生活和工作中不可或缺的一部分。无论是用于营销推广,还是用于内部通信,掌握如何用Java发送邮件都是一项非常实用的技能。本文将详细介绍如何使用Java进行邮件发送的操作步骤。
二、Java邮件发送的基础知识
- Java Mail API:Java Mail API是Sun公司提供的一个用于处理电子邮件的开源框架,它提供了一种标准的方法来读取、发送和处理电子邮件。
- SMTP协议:SMTP(Simple Mail Transfer Protocol)是一种简单邮件传输协议,它是用于从源地址到目的地址传输邮件的协议,通过它来控制邮件的中转方式。
三、Java操作发送邮件的步骤
示例是在springboot项目的基础上实现的:
1.引入Java Mail API库:
首先,我们需要在项目中引入Java Mail API库,以便使用其提供的类和方法。
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>1.6.7</version>
</dependency>、
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
补充 :将Themleaf 也引入,因为发送短信的模版要使用该工具,依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后需要添加邮箱配置,具体配置如下,只需要自定义 username 和 password(SMTP授权码):
2.创建email实体类,emailService业务类以及实现类
import lombok.Data;
import java.io.Serializable;
@Data
public class Email implements Serializable {
/**
* 收件人
*/
private String sendTo;
/**
* 主题(业务的标识)
*/
private String subject;
/**
* 模板内容
*/
private String content;
/**
* 操作人
*/
private String createdBy;
}
public interface EmailService {
void sendEmail(Email email);
}
注意 :这里配置的 from 邮箱必须与yml配置文件中的邮箱一致,因为SMTP 服务器要求发件人邮箱地址必须与身份验证用户名一致
@Service
@Slf4j
public class EmailServiceImpl implements EmailService {
private String from = "testEmail@test.com";
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendEmail(Email email) {
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
//发送人
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(email.getSendTo());
mimeMessageHelper.setSubject(email.getSubject());
mimeMessageHelper.setText(email.getContent(), true);
javaMailSender.send(mimeMessage);
} catch (Exception e) {
log.error("send mail error,the email subject is ->{}", email.getSubject(), e);
}
}
}
3.将发送邮件功能包装为一个工具类
@Component
public class SendEmailCodeUtil {
@Resource
private SpringTemplateEngine springTemplateEngine;
@Resource
private EmailService emailService;
/**
* 发送邮箱验证码的功能
*/
public void sendCodeEmail(String mail, String code) {
Context context = new Context();
context.setVariable("verificationCode", code);
String content = springTemplateEngine.process("send_code_email", context);
Email email = new Email();
email.setSendTo(mail);
email.setContent(content);
email.setSubject("验证码");
emailService.sendEmail(email);
}
}
2-这里是给邮件自定义一个html模板, 放到Resources/templates文件夹下即可,类似于(Resources/templates/send_code_email.html)
1-是用占位符待会儿填充数字
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>邮件身份校验</title>
</head>
<body>
<div class="container">
<div class="content">
<div class="divider"></div>
<div class="title"> 邮箱身份校验</div>
<br>
<div class="verification-code">
您正在进行身份验证,验证码为:<span th:text="${verificationCode}" style="color: #222222;"></span>(5分钟内有效,请勿泄露给他人)
</div>
<br>
<br>
</div>
</body>
</html>
注意事项
启动项目时若出现以下异常,找不到对应的javamailsender的bean,但是可以正常引入
Description: A component required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.
解决方案:(1)手动添加配置类,方法标注@Bean 注解
@Configuration
public class MailConfiguration {
@Bean
public JavaMailSenderImpl JavaMailSender(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.qq.com");
javaMailSender.setUsername("xxxxxxx@qq.com");
//密码是qq账户中获取的授权码
javaMailSender.setPassword("xxxxxxx");
return javaMailSender;
}
}
4.用个简单的控制层接口模拟下请求
@PostMapping("/sendMsg")
public void sendMsg(@RequestParam String number, String code) {
sendEmailCodeUtil.sendCodeEmails(number,code);
}
5.使用接口测试工具模拟下请求操作
以上就是使用Java操作发送邮件的基本步骤和代码示例,即使现在很多都是用手机发送短信了也比较便捷,但是邮件是免费的还要啥自行车,下一期添加个邮件发送日志,将记录保存到数据库中,当一把管理员实现数据持久化