springMVC中发送邮件可发送附件

	@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";
	}


参考:

获取含上传文件表单中的非文件字段

如何发送附件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值