第一步
首先登录你的邮箱,进入页面,点击设置->账户
点击管理账户
生成授权码


发送短信,这样你就拿到了属于你邮箱的授权码了。
接下来,导入我们的整合依赖JMail。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
讯享网
resources下的配置文件application.properties
讯享网#配置邮件服务器的地址
spring.mail.host=smtp..com
#发送邮件人的邮箱
spring.mail.username=你的邮箱
#邮箱设置里SMTP服务生成的授权码
spring.mail.password=授权码
#SSL连接配置
spring.mail.properties.mail.smtp.ssl.enable=true
#配置默认编码
spring.mail.default-encoding=utf-8
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=true
在项目下创建domain包,创建一个用于封装邮箱的实体类MailDO

package com.example.exe5.domain; import java.util.Map; public class MailDO { // 标题 private String title; // 内容 private String content; // 接收人邮件地址 private String email; // 附加,value文件的绝对地址/动态模板数据 private Map<String,Object> attachment; public MailDO() { } public MailDO(String title, String content, String email, Map<String, Object> attachment) { this.title = title; this.content = content; this.email = email; this.attachment = attachment; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Map<String, Object> getAttachment() { return attachment; } public void setAttachment(Map<String, Object> attachment) { this.attachment = attachment; } }
在项目下创建Service包,创建一个MailService用来封装Mail的业务层逻辑
讯享网package com.example.exe5.service; import com.example.exe5.domain.MailDO; import org.omg.CORBA.SystemException; import org.springframework.mail.javamail.MimeMessageHelper; public interface MailService { void sendTextMail(MailDO mailDO) throws SystemException; void sendHtmlMail(MailDO mailDO,boolean isShowHtml); void sendTemplateMail(MailDO mailDO); // 发送附件 void sendComplexEmail(MailDO mailDO,String filePath,String rscId,String rscPath); }
在项目的Service包中,继续创建一个Impl包,创建一个MailServiceImpl类对业务接口进行实现
package com.example.exe5.service.impl; import com.example.exe5.domain.MailDO; import com.example.exe5.service.MailService; import org.omg.CORBA.SystemException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.MailException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.thymeleaf.TemplateEngine; import org.thymeleaf.standard.expression.MessageExpression; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; @Service public class MailServiceImpl implements MailService { private final static Logger log = LoggerFactory.getLogger(MailServiceImpl.class); @Autowired private TemplateEngine templateEngine; @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String from; @Async @Override public void sendTextMail(MailDO mail) throws SystemException { // 建立邮件消息 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from); message.setSubject(mail.getTitle()); message.setTo(mail.getEmail()); message.setText(mail.getContent()); try { javaMailSender.send(message); }catch (MailException e){ log.error("纯文本邮件发送失败->message:{}",e.getMessage()); System.out.println("邮件发送失败"); } } @Override public void sendHtmlMail(MailDO mailDO, boolean isShowHtml) { try{ MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true); messageHelper.setFrom(from); messageHelper.setTo(mailDO.getEmail()); messageHelper.setSubject(mailDO.getTitle()); messageHelper.setText(mailDO.getContent(),isShowHtml); // 判断是否有附加图片等 if(mailDO.getAttachment()!=null&&mailDO.getAttachment().size()>0){ mailDO.getAttachment().entrySet().stream().forEach(entrySet->{ try{ File file = new File(String.valueOf(entrySet.getValue())); if(file.exists()){ messageHelper.addAttachment(entrySet.getKey(),new FileSystemResource(file)); } }catch (MessagingException e){ log.error("附件发送失败->message:{}",e.getMessage()); System.out.println("附件发送失败"); } }); } //发送 javaMailSender.send(mimeMessage); }catch (MessagingException e){ log.error("富文本邮件发送失败->message:{}",e.getMessage()); System.out.println("附件发送失败"); } } @Override public void sendTemplateMail(MailDO mailDO) { } @Override public void sendComplexEmail(MailDO mailDO,String filePath, String rscId, String rscPath) { MimeMessage message = javaMailSender.createMimeMessage(); try{ MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(mailDO.getEmail()); helper.setSubject(mailDO.getTitle()); helper.setText(mailDO.getContent(),true); // 设置邮件静态资源 FileSystemResource res = new FileSystemResource(new File(rscPath)); helper.addInline(rscId,res); // 设置邮件附件 FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName,file); // 发送邮件 javaMailSender.send(message); System.out.println("复杂邮件发送成功"); }catch (MessagingException e){ System.out.println("复杂邮件发送失败"); e.printStackTrace(); } } }
在项目下创建controller包,创建一个MailController控制器类
讯享网package com.example.exe5.controller;
import com.example.exe5.domain.MailDO;
import com.example.exe5.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class MailOperation {
private MailDO mailDO;
@Autowired
private MailService mailService;
@GetMapping("/toSendMail")
public String toSendMail(){
return "sendmail";
}
@RequestMapping("/sendMail")
public String sendMail(HttpServletRequest request){
String title = request.getParameter("title");
String to = request.getParameter("to");
String content = request.getParameter("content");
mailDO = new MailDO(title,content,to,null);
mailService.sendTextMail(mailDO);
return "redirect:/toSendMail";
}
@RequestMapping("/sendComplexMail")
public String sendComplexMail(HttpServletRequest request){
String title = "复杂附件测试";
String to = "1048001021@.com";
StringBuilder text = new StringBuilder();
text.append("<html><head></head>");
text.append("<body><h1>复杂附件</h1>");
String rscId = "img001";
text.append("<img src='cid:"+rscId+"'/></body></html>");
String rscPath = "E:\\files\\复杂img.jpg";
String filePath = "E:\\复杂附件测试.txt";
// 发送复杂邮件
mailDO = new MailDO(title,text.toString(),to,null);
mailService.sendComplexEmail(mailDO,filePath,rscId,rscPath);
return "redirect:/toSendMail";
}
}
到最后,启动项目的主启动类,这样你的邮箱就收到了消息。


如果你学习到这里,并没有成功运行,可以私信我寻求帮助哦!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119218.html