java压缩文件并加密,发送到邮箱

日常记录

目标,我们需要把文件进行压缩 并进行加密设置密码,并发送到指定的邮箱,这是需求

首先把工具类贴出来

我们需要导入一个jar包 winzipaes-1.0.1.jar

上传了一下,告诉已经存在了所以,有看到的去找下吧, 应该很好找的

用法在下面

import de.idyl.winzipaes.AesZipFileDecrypter;
import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESDecrypterBC;
import de.idyl.winzipaes.impl.AESEncrypterBC;
import de.idyl.winzipaes.impl.ExtZipEntry;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.Message.RecipientType;
import javax.mail.internet.*;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.zip.DataFormatException;
/**
 * 发送邮件(适用qq邮箱)
 * @author miaoch
 * 
 */
public class MailUtils{
    //发送的邮箱 内部代码只适用qq邮箱
    private   String user ;//= "";
    //授权密码 通过QQ邮箱设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开启POP3/SMTP服务获取
    private   String pwd ;//= "";
    private   String port ;
    private   String host;
    public MailUtils(String user, String pwd, String port, String host) {
        this.user = user;
        this.pwd = pwd;
        this.port = port;
        this.host = host;
    }
    public MailUtils() {
        super();
    }
    private String[] to;
    private String[] cc;//抄送
    private String[] bcc;//密送
    private String[] fileList;//附件
    private String subject;//主题
    private String content;//内容,可以用html语言写
    public void sendMessage() throws Exception{
        // 配置发送邮件的环境属性
        final Properties props = new Properties();
        //下面两段代码是设置ssl和端口,不设置发送不出去。
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        //props.setProperty("mail.smtp.port", "465");  //163邮箱的端口是25
        props.setProperty("mail.smtp.socketFactory.port", port);
        // 表示SMTP发送邮件,需要进行身份验证
        props.setProperty("mail.transport.protocol", "smtp");// 设置传输协议
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", host);//QQ邮箱的服务器 如果是企业邮箱或者其他邮箱得更换该服务器地址
        // 发件人的账号              //smtp.163.com =163 端口25  //smtp.qq.com  =QQ  端口465
        props.put("mail.user", user);
        // 访问SMTP服务时需要提供的密码 
        props.put("mail.password", pwd);
        // 构建授权信息,用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息,创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        //开启debug模式
        mailSession.setDebug(true);
        MimeMessage message = new MimeMessage(mailSession);
        BodyPart messageBodyPart = new MimeBodyPart(); 
        Multipart multipart = new MimeMultipart(); 
        // 设置发件人
        InternetAddress form = new InternetAddress(
                props.getProperty("mail.user"));
        message.setFrom(form);
        //发送
        if (to != null) { 
            String toList = getMailList(to); 
            InternetAddress[] iaToList = new InternetAddress().parse(toList); 
            message.setRecipients(RecipientType.TO, iaToList); // 收件人 
        } 
        //抄送 
        if (cc != null) { 
            String toListcc = getMailList(cc); 
            InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc); 
            message.setRecipients(RecipientType.CC, iaToListcc); // 抄送人 
        } 
        //密送 
        if (bcc != null) { 
            String toListbcc = getMailList(bcc); 
            InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc); 
            message.setRecipients(RecipientType.BCC, iaToListbcc); // 密送人 
        } 
        message.setSentDate(new Date()); // 发送日期 该日期可以随意写,你可以写上昨天的日期(效果很特别,亲测,有兴趣可以试试),或者抽象出来形成一个参数。
        message.setSubject(subject); // 主题 
        message.setText(content); // 内容 
        //显示以html格式的文本内容 
        messageBodyPart.setContent(content,"text/html;charset=utf-8"); 
        multipart.addBodyPart(messageBodyPart); 
        //保存多个附件 
        if(fileList!=null){ 
            addTach(fileList, multipart); 
        } 
        message.setContent(multipart); 
        // 发送邮件
        Transport.send(message);
    }
    public void setTo(String[] to) {
        this.to = to;
    }
    public void setCc(String[] cc) {
        this.cc = cc;
    }
    public void setBcc(String[] bcc) {
        this.bcc = bcc;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public void setFileList(String[] fileList) {
        this.fileList = fileList;
    }
    private String getMailList(String[] mailArray) { 
        StringBuffer toList = new StringBuffer(); 
        int length = mailArray.length; 
        if (mailArray != null && length < 2) { 
            toList.append(mailArray[0]); 
        } else { 
            for (int i = 0; i < length; i++) { 
                toList.append(mailArray[i]); 
                if (i != (length - 1)) { 
                    toList.append(","); 
                } 
            } 
        } 
        return toList.toString(); 
    } 
    //添加多个附件 
    public void addTach(String fileList[], Multipart multipart) throws MessagingException, UnsupportedEncodingException { 
        for (int index = 0; index < fileList.length; index++) { 
             MimeBodyPart mailArchieve = new MimeBodyPart(); 
             FileDataSource fds = new FileDataSource(fileList[index]); 
             mailArchieve.setDataHandler(new DataHandler(fds)); 
             mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B")); 
             multipart.addBodyPart(mailArchieve); 
        }   
    }
    public  static boolean sendMail(String subject,String content,String[] target,String[] copy,String[] secret,String[] fileList){
          boolean sccessOrError=false;
        MailUtils mail = new MailUtils();
        mail.setSubject(subject);
        mail.setContent(content);
        //收件人 可以发给其他邮箱(163等) 下同
        mail.setTo(target);
        //抄送
        mail.setCc(copy);
        //密送
        mail.setBcc(secret);
        //发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
        mail.setFileList(fileList);
        //发送邮件
        try {
            mail.sendMessage();
            System.out.println("发送邮件成功!");
            sccessOrError=true;
        } catch (Exception e) {
            System.out.println("发送邮件失败!");
            e.printStackTrace();
            return sccessOrError;
        }
       return sccessOrError;
    }
    public  static boolean sendMail(String subject,String content,String[] target,String[] fileList){
        boolean sccessOrError=false;
        MailUtils mail = new MailUtils();
        mail.setSubject(subject);
        mail.setContent(content);
        //收件人 可以发给其他邮箱(163等) 下同
        mail.setTo(target);
        /*抄送
        mail.setCc(copy);
        //密送
        mail.setBcc(secret);*/
        //发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
        mail.setFileList(fileList);
        //发送邮件
        try {
            String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("开始发送邮件,开始时间:"+startTime);
            mail.sendMessage();
            String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("发送邮件成功!结束时间:"+endTime);
            sccessOrError=true;
        } catch (Exception e) {
            System.out.println("发送邮件失败!");
            e.printStackTrace();
            return sccessOrError;
        }
        return sccessOrError;
    }
    public  static boolean sendMail(String subject,String content,String[] target){
        boolean sccessOrError=false;
        MailUtils mail = new MailUtils();
        mail.setSubject(subject);
        mail.setContent(content);
        //收件人 可以发给其他邮箱(163等) 下同
        mail.setTo(target);
        /*抄送
        mail.setCc(copy);
        //密送
        mail.setBcc(secret);
        //发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
        mail.setFileList(fileList); */
        //发送邮件
        try {
            String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("开始发送邮件,开始时间:"+startTime);
            mail.sendMessage();
            String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("发送邮件成功!结束时间:"+endTime);
            sccessOrError=true;
        } catch (Exception e) {
            System.out.println("发送邮件失败!");
            e.printStackTrace();
            return sccessOrError;
        }
        return sccessOrError;
    }
    //以下是演示demo
/*    public static void main(String args[]) {
        MailUtils mail = new MailUtils();
        mail.setSubject("这个是标题");
        mail.setContent("这个是内容");
        //收件人 可以发给其他邮箱(163等) 下同
        mail.setTo(new String[] {"675458028@qq.com"});
        //抄送
        mail.setCc(new String[] {"xxx@qq.com","xxx@qq.com"});
        //密送
        mail.setBcc(new String[] {"xxx@qq.com","xxx@qq.com"});
        //发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
        mail.setFileList(new String[] {"C:\\Users\\67545\\Desktop\\img\\12312321.out"});
        //发送邮件
        try {
            mail.sendMessage();
            System.out.println("发送邮件成功!");
        } catch (Exception e) {
            System.out.println("发送邮件失败!");
            e.printStackTrace();
        }
    }*/
    /**
     * 压缩单个文件并加密
     * @param srcFile      待压缩的文件
     * @param desFile  生成的目标文件
     * @param passWord     压缩文件加密密码
     * @throws IOException
     */
    public static void zipFile(String srcFile,String desFile,String passWord) throws IOException{
        AesZipFileEncrypter.zipAndEncrypt(new File(srcFile),new File(desFile), passWord, new AESEncrypterBC());
    }
    /**
     * 给指定的压缩文件进行加密
     * @param srcZipFile      待加密的压缩文件
     * @param desFile         加密后的目标压缩文件
     * @param passWord        压缩文件加密密码
     * @throws IOException
     */
    public static void encryptZipFile(String srcZipFile,String desFile,String passWord) throws IOException{
        AesZipFileEncrypter.zipAndEncryptAll(new File(srcZipFile), new File(desFile), passWord, new AESEncrypterBC());
    }
    /**
     * 解密抽取压缩文件中的某个文件
     * @param srcZipFile    加密的压缩文件
     * @param extractFileName  抽取压缩文件中的某个文件的名称
     * @param desFile          解压后抽取后生成的目标文件
     * @param passWord         解压密码
     * @throws IOException
     * @throws DataFormatException
     */
    public static void  decrypterZipFile(String srcZipFile,String extractFileName,String desFile,String passWord)throws IOException, DataFormatException{
        AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File(srcZipFile),new AESDecrypterBC());
        ExtZipEntry entry = zipFile.getEntry(extractFileName);
        zipFile.extractEntry( entry, new File(desFile),passWord);
    }
    public static void main(String[] args) throws Exception {
        String srcFile="F:\\WJ\\JiYue\\sunpay\\sp_boss\\src\\java\\com\\core\\common\\util/test.txt";
        String desFile="test.zip";
        zipFile(srcFile, desFile,"123qwe");
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getPort() {
        return port;
    }
    public void setPort(String port) {
        this.port = port;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
}

上面代码中用密码加密、解密压缩文件的方法

/**
     * 压缩单个文件并加密
     * @param srcFile      待压缩的文件
     * @param desFile  生成的目标文件
     * @param passWord     压缩文件加密密码
     * @throws IOException
     */
    public static void zipFile(String srcFile,String desFile,String passWord) throws IOException{
        AesZipFileEncrypter.zipAndEncrypt(new File(srcFile),new File(desFile), passWord, new AESEncrypterBC());
    }
    /**
     * 给指定的压缩文件进行加密
     * @param srcZipFile      待加密的压缩文件
     * @param desFile         加密后的目标压缩文件
     * @param passWord        压缩文件加密密码
     * @throws IOException
     */
    public static void encryptZipFile(String srcZipFile,String desFile,String passWord) throws IOException{
        AesZipFileEncrypter.zipAndEncryptAll(new File(srcZipFile), new File(desFile), passWord, new AESEncrypterBC());
    }
    /**
     * 解密抽取压缩文件中的某个文件
     * @param srcZipFile    加密的压缩文件
     * @param extractFileName  抽取压缩文件中的某个文件的名称
     * @param desFile          解压后抽取后生成的目标文件
     * @param passWord         解压密码
     * @throws IOException
     * @throws DataFormatException
     */
    public static void  decrypterZipFile(String srcZipFile,String extractFileName,String desFile,String passWord)throws IOException, DataFormatException{
        AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File(srcZipFile),new AESDecrypterBC());
        ExtZipEntry entry = zipFile.getEntry(extractFileName);
        zipFile.extractEntry( entry, new File(desFile),passWord);
    }

下面介绍一下用法

直接调用方法即可,第一个参数是你的文件名称,第二个事压缩完后的文件名称,第三个是压缩加密的密码

最好是在项目的根目录

MailUtils.zipFile( fileNameTxt, fileNameZip, password);

如果不在项目根目录的话打开压缩文件会出现你服务器的路径名称

def sendB = sendMail(subject, content, target, fileList)

开始发送邮件

subject 邮箱的标题

content 邮件的内容 ,就跟写页面一样一样一样的

target 是一个数组, 发送的目标邮箱,如:target=[‘123@qq.com’,’456@qq.com’,’789@qq.com’]

可以多个一起发送,也可以只发一个

fileList 也是一个数组,发送所附带的附件,也可以是多个,

如:target=[‘路径’,’路径’,’路径’]

这是发送的方法 可以自行修改成符合自己需求的

public static boolean sendMail(String subject, String content, String[] target, String[] fileList) {
        boolean sccessOrError = false;
        MailUtils mail = new MailUtils(user, pwd, port, host);
        mail.setSubject(subject);
        mail.setContent(content);
        //收件人 可以发给其他邮箱(163等) 下同
        mail.setTo(target);
        /*抄送
        mail.setCc(copy);
        //密送
        mail.setBcc(secret);*/
        //发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
        mail.setFileList(fileList);
        //发送邮件
        try {
            String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("开始发送邮件,开始时间:" + startTime);
            mail.sendMessage();
            String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
            System.out.println("发送邮件成功!结束时间:" + endTime);
            sccessOrError = true;
        } catch (Exception e) {
            System.out.println("发送邮件失败!");
            e.printStackTrace();
            return sccessOrError;
        }
        return sccessOrError;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值