导入依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
QQ和谷歌都要生成专用的密码
QQ:
开启服务
生成授权码
谷歌:
启用IMAP
开启两步验证
进入两步验证,找到应用专业密码
生成应用专业密码
业务实现(包括富文本和多个附件)
//采用QQ邮箱测试
public Object send(EmailBean emailBean, HttpServletRequest request) {
emailBean.setUsername("176*********@qq.com"); //发件人邮箱
emailBean.setPassword("************"); //发件人授权码
// 创建Properties对象,设置邮件服务器相关属性
Properties props = new Properties();
emailBean.setHost("smtp.qq.com"); //qq : smtp.qq.com, gmail : smtp.gmail.com
emailBean.setPort("465");
props.put("mail.smtp.host", emailBean.getHost());
props.put("mail.smtp.port", emailBean.getPort());
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
EmailBean finalEmailBean = emailBean;
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(finalEmailBean.getUsername(), finalEmailBean.getPassword());
}
});
//发送给订阅者
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailBean.getUsername()));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("*****@qq.com")); //收件人邮箱,其他类型的邮箱都可以发送
message.setSubject(emailBean.getTitle()); //邮件主题
//正文部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(emailBean.getContent(), "text/html;charset=utf-8"); //这里设置类型为富文本
//正文+附件
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(textPart);
//附件部分,考虑多个附件
if (CollectionUtils.isNotEmpty(files)) {
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
// 将文件保存到临时目录
File tempFile = File.createTempFile("temp", fileName);
file.transferTo(tempFile);
MimeBodyPart filePart = new MimeBodyPart();
// 将文件附加到邮件中
filePart.attachFile(tempFile);
// 设置附件的文件名
filePart.setFileName(fileName);
mimeMultipart.addBodyPart(filePart);
}
}
message.setContent(mimeMultipart);
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
return ResponseBean.serverError("发送邮件失败");
} catch (IOException e) {
throw new RuntimeException(e);
}
return ResponseBean.success("发送成功!");
}