@RequestMapping("send.html")
@ResponseBody
protected String send(HttpServletRequest request){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// enctype="multipart/form-data"的form不能直接从request获取
String recipient = multipartRequest.getParameter("recipient");
String sender = multipartRequest.getParameter("sender");
String subject = multipartRequest.getParameter("subject");
String content = multipartRequest.getParameter("content");
double size = recipient.length() + sender.length() + subject.length() + content.length();
String userName = sender;
String password = "*";
Properties props = new Properties();
props.put("mail.debug", "true");
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
// 授权用户和密码可以在这设置,也可以在发送时直接设置
Session session = Session.getDefaultInstance(props, null);
Message message = new MimeMessage(session);
try {
Address sendAddress = new InternetAddress(sender);
message.setFrom(sendAddress);
// 支持发送多个收件人
String [] recipients = recipient.split(";");
Address[] recipientAddress = new Address[recipients.length];
for (int i = 0; i < recipients.length; i++) {
recipientAddress[i] = new InternetAddress(recipients[i]);
}
message.setRecipients(Message.RecipientType.TO, recipientAddress);
message.setSubject(subject);
// 以html发送
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(content, "text/html; charset=utf-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
// 单纯发送文本的用setText即可
// message.setText(content);
String mailId = UUID.randomUUID().toString();
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
String destDir = request.getServletContext().getRealPath("/") + Constant.ATTACHMENT_PATH + sender + "/" + mailId + "/";
if(fileMap.size() > 0){
new File(destDir).mkdirs();
System.out.println(destDir);
}
StringBuilder attachment = new StringBuilder();
for (Entry<String, MultipartFile> entry : fileMap.entrySet()){
MultipartFile multipartFile = entry.getValue();
String realFileName = multipartFile.getOriginalFilename();
File destFile = new File(destDir + realFileName);
try {
multipartFile.transferTo(destFile);
} catch (IOException e) {
System.out.println("上传文件失败");
}
attachment.append(":").append(realFileName);
// 附件还没上传完就发送可能有问题
FileDataSource fileDataSource = new FileDataSource(destFile);
bodyPart = new MimeBodyPart();
bodyPart.setDataHandler(new DataHandler(fileDataSource));
bodyPart.setFileName(realFileName);
multipart.addBodyPart(bodyPart);
size += destFile.length();
}
message.setContent(multipart);
Transport.send(message, userName, password);
Map<String,Object> map = new HashMap<String,Object>();
map.put("mailId", mailId);
map.put("recipient", recipient);
map.put("sender", sender);
map.put("subject", subject);
map.put("content", content);
map.put("time", DateUtils.getDateTime());
map.put("size", size);
map.put("attachment", attachment.length() > 0 ? attachment.substring(1) : "");
int i = MybatisUtils.insert("mail.mysql.insertMail", map);
if(i == 0){
return "failure";
}
} catch (MessagingException e) {
e.printStackTrace();
return "failure";
}
return "success";
}
不含附件的简单发送
@RequestMapping("simpleSend.html")
@ResponseBody
protected String simpleSend(HttpServletRequest request){
String recipient = request.getParameter("recipient");
String sender = request.getParameter("sender");
String subject = request.getParameter("subject");
String content = request.getParameter("content");
double size = recipient.length() + sender.length() + subject.length() + content.length();
String userName = sender;
String password = "*";
Properties props = new Properties();
props.put("mail.debug", "true");
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
// 授权用户和密码可以在这设置,也可以在发送时直接设置
Session session = Session.getDefaultInstance(props, null);
Message message = new MimeMessage(session);
try {
Address sendAddress = new InternetAddress(sender);
message.setFrom(sendAddress);
// 支持发送多个收件人
String [] recipients = recipient.split(";");
Address[] recipientAddress = new Address[recipients.length];
for (int i = 0; i < recipients.length; i++) {
recipientAddress[i] = new InternetAddress(recipients[i]);
}
message.setRecipients(Message.RecipientType.TO, recipientAddress);
message.setSubject(subject);
// 以html发送
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(content, "text/html; charset=utf-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
// 单纯发送文本的用setText即可
// message.setText(content);
message.setContent(multipart);
Transport.send(message, userName, password);
} catch (MessagingException e) {
e.printStackTrace();
return "failure";
}
return "success";
}
参考: