java 文件的加密压缩 和邮件发送

本文介绍了一种利用Java实现的文件加密压缩方法,并详细展示了如何使用zip4j库进行操作。此外,还提供了一个完整的示例,演示了如何将加密压缩后的文件通过电子邮件发送。
文件的加密压缩部分,推荐使用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服务器密码!!!不然会报错的,恩,就这样,希望会对你 有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值