创新项目实训
任务
为了扩展项目的功能,引入邮箱服务,如使用邮箱服务进行注册时的邮箱验证,将图表及相关信息发送到指定邮箱等功能。
具体流程
- 首先在,依赖中引入依赖
<!--引入邮箱服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 在
application.properties
中进行配置相关信息
spring.mail.protocol=smtp
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=yourEmail@qq.com
spring.mail.password=
spring.mail.default-encoding=utf-8
spring.mail.properties.mail.smtp.auth=true
- 注意该password是在你的qq邮箱中申请smtp服务,给提供的密码!!!
- 步骤如下
-
登录QQ邮箱:
打开浏览器并访问QQ邮箱的官方网站(mail.qq.com),使用QQ账号和密码登录。 -
进入设置:
登录后,在页面右上角找到QQ头像或用户名旁边,点击“设置”按钮。 -
选择账户设置:
-
在下拉菜单中选择“账户”选项,这会带到账户设置页面。
-
找到SMTP服务设置:
向下滚动至页面中部,找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”区域。 -
开启SMTP服务:
在“SMTP服务”一栏,如果服务尚未开启,点击“开启”按钮。开启后,可能需要输入一次密码以确认操作。 -
保存设置:
完成上述步骤后,确保点击页面底部的“保存更改”按钮,以使设置生效。
-
- 使用相关服务
-
JavaMailSenderImpl来发送邮件,并且支持发送简单的纯文本邮件(包含验证码)以及更复杂的、带有HTML内容和嵌入式图片的邮件。具体来说:
- 控制器包含了两个POST方法:/sendSimpleMail用于发送包含验证码的简单文本邮件;/sendImageMail则负责发送含有图片和分析结论的富文本邮件,其中图片是以Base64编码形式在请求体中传递的。
package com.example.demo.controller;
import com.example.demo.payload.DataRequest;
import com.example.demo.payload.DataResponse;
import com.example.demo.utils.CommonMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Random;
@RestController
@RequestMapping("/api/mail")
public class MailController {
@Autowired
JavaMailSenderImpl javaMailSender;
@PostMapping("/sendSimpleMail")
public DataResponse sendSimpleMail(@RequestBody DataRequest dataRequest) {
String Receiver = dataRequest.getString("email");
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("注册验证码信息");
Integer code = new Random().nextInt(8999) + 1000;
message.setText("【智能数据分析系统】您的验证码是 " + code + ",有效时间 5 分钟,请不要泄露验证码给其他人。如非本人操作,请忽略!");
message.setTo(Receiver);
message.setFrom("yourEmail");//此处与你的配置的邮箱保持一致
//默认发送方已经配置好了
javaMailSender.send(message);
return CommonMethod.getReturnData(200,code,"发送成功");
}
@PostMapping("/sendImageMail")
public DataResponse sendImageMail(@RequestBody DataRequest dataRequest){
try{
String imgData= dataRequest.getString("imageData");//获取图片Base64编码
String to=dataRequest.getString("email");//
String subject=dataRequest.getString("subject");
String analyse=dataRequest.getString("analyse");
// 将Base64编码的图片转换为HTML img标签
String imgTag = "<img src='data:image/png;base64," + imgData.split(",")[1] + "'/>";
// 构建邮件正文
String emailBody = "根据数据绘制的:<br>" + imgTag +"<br>得到的结论是:<br>"+analyse;
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to);
helper.setFrom("yourEmail");
helper.setSubject(subject);
helper.setText(emailBody, true); // 第二个参数为true表示启用HTML格式
javaMailSender.send(mimeMessage);
return CommonMethod.getReturnMessage(200,"ok");
}catch(MessagingException e){
return CommonMethod.getReturnMessage(500, "Failed to send email: " + e.getMessage());
}
}
}