java 文件的加密压缩 和邮件发送
2017-07-12 10:02
776 查看
文件的加密压缩部分,推荐使用zip4j包,非常好用。
package util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.UUID; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; public class FileUtils { public static final String DEFAULT_PATH = "test/"; public static String generatePath(String fileName,String basePath){ String suffix = fileName.substring(fileName.indexOf(".")); String path = basePath + System.nanoTime() + UUID.randomUUID() + suffix; return path.replace("-",""); } public static String generatePath(String fileName){ return generatePath(fileName,DEFAULT_PATH); } /** *@描述 :用于券码导出并压缩加密 *@创建人:lee *@创建时间:2017年7月10日 下午1:38:59 *@修改人: *@修改时间: *@修改描述: *@param srcCode *@param filePath *@param password *@param file */ public static void EncryptAndZip(StringBuffer srcCode,String filePath,String password,File file) { String name="cardList"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); try { // 根据filePath创建相应的目录 if(!file.getParentFile().exists()){ file.getParentFile().mkdirs(); } file.createNewFile(); // 向文件写入内容(输出流) byte bt[] = new byte[1024]; bt = srcCode.toString().getBytes(); FileOutputStream fos=new FileOutputStream(file); fos.write(bt, 0, bt.length); fos.close(); ZipFile zipFile = new ZipFile(filePath+"/"+name+".zip"); // 创建zip包,指定了zip路径和zip名称 ArrayList<File> fileAddZip = new ArrayList<File>(); // 向zip包中添加文件集合 fileAddZip.add(file); // 向zip包中添加一个word文件 ZipParameters parameters = new ZipParameters(); // 设置zip包的一些参数集合 parameters.setEncryptFiles(true); // 是否设置密码(此处设置为:是) parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式(默认值) parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 普通级别(参数很多) parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密级别 parameters.setPassword(password); // 压缩包密码为123456 zipFile.createZipFile(fileAddZip, parameters); // 创建压缩包完成 file.delete(); } catch (IOException | ZipException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
邮件发送代码,还是喜欢直接上代码。。。
package action.emailUtils; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.io.*; import java.util.Properties; public class SendMail { private String host = ""; // smtp服务器 private String from = ""; // 发件人地址 private String to = ""; // 收件人地址 private String affix = ""; // 附件地址 private String affixName = ""; // 附件名称 private String user = ""; // 用户名 private String pwd = ""; // 密码 private String subject = ""; // 邮件标题 public void setAddress(String from, String to, String subject) { this.from = from; this.to = to; this.subject = subject; } public void setAffix(String affix, String affixName) { this.affix = affix; this.affixName = affixName; } public void send(String host, String user, String pwd) { this.host = host; this.user = user; this.pwd = pwd; Properties props = new Properties(); // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器) props.put("mail.smtp.host", host); // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证 props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", 465); props.put("mail.smtp.ssl.enable", true); // 用刚刚设置好的props对象构建一个session Session session = Session.getDefaultInstance(props); // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使 // 用(你可以在控制台(console)上看到发送邮件的过程) session.setDebug(true); // 用session为参数定义消息对象 MimeMessage message = new MimeMessage(session); try { // 加载发件人地址 message.setFrom(new InternetAddress(from)); // 加载收件人地址 message.addRecipient(Message.RecipientType.TO, new InternetAddress( to)); // 加载标题 message.setSubject(subject); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart(); // 设置邮件的文本内容 BodyPart contentPart = new MimeBodyPart(); contentPart.setText("请妥善保存券码···"); multipart.addBodyPart(contentPart); // 添加附件 BodyPart messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(affix); // 添加附件的内容 messageBodyPart.setDataHandler(new DataHandler(source)); // 添加附件的标题 // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); messageBodyPart.setFileName("=?GBK?B?" + enc.encode(affixName.getBytes()) + "?="); multipart.addBodyPart(messageBodyPart); // 将multipart对象放到message中 message.setContent(multipart); // 保存邮件 message.saveChanges(); // 发送邮件 Transport transport = session.getTransport("smtp"); // 连接服务器的邮箱 transport.connect(host, user, pwd); // 把邮件发送出去 transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { File file = new File("D:\\temp\\aa.zip"); try { OutputStream os = new FileOutputStream(file); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"utf-8")); bw.write("hello"); bw.close(); os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } SendMail cn = new SendMail(); // 设置发件人地址、收件人地址和邮件标题 cn.setAddress("654321@qq.com", "123456@qq.com", "测试券码发送"); // 设置要发送附件的位置和标题 cn.setAffix("D:\\temp\\aa.zip", "aa.zip"); // 设置smtp服务器以及邮箱的帐号和密码 cn.send("smtp.qq.com", "654321@qq.com", "此处填SMTP服务器密码"); } }
注意,要去qq邮箱里获取SMTP服务器密码!!!不然会报错的,恩,就这样,希望会对你 有所帮助。
相关文章推荐
- java中如何实现邮件的发送包括网页文件的发送
- 使用java对文件或文件夹进行压缩和加密
- 使用java对文件或文件夹进行压缩和加密
- 使用java对文件或文件夹进行压缩和加密
- 使用java对文件或文件夹进行压缩和加密
- java实现邮件的发送和网页文件的发送
- 有关java对压缩文件的加密(通过密码解密)
- java实现将多个文件打包成zip压缩文件以及对压缩文件的加密
- 通过Java生成加密压缩文件(支持AES压缩和解压zip文件)
- java实现Linux的文件上传/java实现邮件发送/smproxy短信发送
- java实现邮件的发送包括网页文件的发送
- java实现文件压缩并加密-基于zip4j
- 使用java对文件或文件夹进行压缩和加密
- java实现邮件的发送包括网页文件的发送
- java实现邮件的发送包括网页文件的发送
- java实现邮件的发送包括网页文件的发送
- java实现文件压缩并加密-基于zip4j
- 备份指定文件到用户主目录,使用tar命令压缩并发送邮件
- java压缩文件,加密及不加密
- java解压缩/压缩/加密压缩/加密解压缩 ZIP4J---ZIP文件压缩与解压缩学习