13课:springboot实现发送邮件的功能
简介
项目中可能会碰到需要我们会碰到需要发送邮件的功能,预警信息,异常报警等等.
本案例通过springboot来实现通过qq邮箱来模拟发送邮件的功能
项目的结构
代码内容
1.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.khy.mail</groupId>
<artifactId>boot-mail</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--含有多个main 需要指定某一个启动class类 -->
<start-class>com.khy.MainApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.EmailConfig.java
邮箱配置信息的邮件内容;
@Configuration
@ConfigurationProperties(prefix = "email")
@PropertySource("classpath:email.properties")
public class EmailConfig {
private String host,userName,password,timeout,auth;
@Bean
public JavaMailSenderImpl getJavaMailSenderImpl(){
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(host);
sender.setUsername(userName);
sender.setPassword(password);//这个是IMAP/SMTP服务
Properties javaMailProperties = new Properties();
javaMailProperties.setProperty("mail.smtp.timeout", timeout);
javaMailProperties.setProperty("mail.smtp.auth", auth);
sender.setJavaMailProperties(javaMailProperties );
return sender;
}
//省略get/set
}
3.email.properties
关于邮件服务器的配置信息内容;
qq邮箱的配置下面会贴图展示怎么操作的;
email.host=smtp.qq.com
email.userName=190502894@qq.com
email.password=phkmzouxymmvbheh
email.timeout=100000
email.auth=false
4.MailController.java
@RestController
public class MailController {
private static final Logger log = LoggerFactory.getLogger(MailController.class);
@Autowired
private JavaMailSenderImpl sender;
/**
* 发送纯文本内容
* @author khy
* @createTime 2020年8月19日下午4:09:54
* @param receiptAddr
* @return
* @throws MessagingException
*/
@RequestMapping("/mailText")
public String mailText(String[] receiptAddr) throws MessagingException{
String subject = "邮箱标题内容";//邮箱的标题内容
String content = "邮箱里面的内容信息-->纯文本内容";
boolean ret = sendEmail(receiptAddr,subject,content,null);
return "执行完毕";
}
/**
* 发送带有附件的邮件
* @author khy
* @createTime 2020年8月19日下午4:10:00
* @param receiptAddr
* @return
* @throws MessagingException
*/
@RequestMapping("/mailFile")
public String mailFile(String[] receiptAddr) throws MessagingException{
String subject = "邮箱标题内容";//邮箱的标题内容
String content = "邮箱里面的内容信息-->纯文本内容";
List<String>filePaths = new ArrayList<String>(){{
add("C:\\Users\\Administrator\\Desktop\\111.png");
add("C:\\Users\\Administrator\\Desktop\\222.jpg");
add("C:\\Users\\Administrator\\Desktop\\333.jpeg");
}};
boolean ret = sendEmail(receiptAddr,subject,content,filePaths);
return "执行完毕";
}
private boolean sendEmail(String[] receiptAddr, String subject, String content,List<String>filePaths) {
try {
MimeMessage msg = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
String text = createMailText(content);//设置同一个样式内容
helper.setTo(receiptAddr);
helper.setFrom(sender.getUsername());
helper.setSubject(subject);
helper.setText(text,true);
if(!CollectionUtils.isEmpty(filePaths)){//发送带有附近的邮箱内容
for (String filePath : filePaths) {
File attachfile = new File(filePath);
FileSystemResource attachment = new FileSystemResource(attachfile);
helper.addAttachment(MimeUtility.encodeWord(attachfile.getName()), attachment);
}
}
sender.send(msg);
StringBuffer sb = new StringBuffer("");
for(String s : receiptAddr){
sb.append(s);
sb.append(",");
}
log.info("邮件发送者:{}" ,sender.getUsername());
log.info("邮件已发送给:" + sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 创建邮件内容
* @param content 内容
* @return 邮件内容
*/
private static String createMailText(String content){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String blank = " ";
String text = "<html><head></head><body>"
+ "<p>您好:</p>"
+ "<p>" + blank + content +"</p>"
+ "<p>" + blank + "跳转链接地址" + "<a href='https://www.baidu.com/'>百度一下"//添加了带有跳转链接的
+ "<p>" + blank + "此邮件为支付平台自动发出,请勿回复。 </p>"
+ "<p>" + blank + "如有问题,请及时联系技术部门接口人。</p>"
+ "<p>" + blank + "祝您工作愉快。</p>"
+ "<p>" + blank + sdf.format(date) +"</p>"
+ "</body></html>";
return text;
}
}
但是项目需要注意的是如果附件文件过大的话发送邮件会异常;
解决方案就是将大文件上传到内容服务器,然后指定文件在服务器的地址通过邮件将地址链接发送 给指定用户;
项目看起来干净整洁 将配置文件里面的发邮件的邮箱配置 然后调用接口的时间输入发送邮件的人既可;
QQ邮箱的配置
1.登录个人的qq邮箱
2.通过账户设置下拉找到邮箱服务设置
开启指定服务内容;
这个就是email.properties文件中的密码的配置;
然后执行
localhost:11111/mailText 发送的纯文本内容
其中主题和文件内容都是我们自定义的;
localhost:11111/mailFile发送带有附件的邮件
里面的附件 ,
下面百度一下是发送带有 跳转链接的;