一、背景

Java发送邮件——加密_mail

如图所示,在使用Hutool的邮件相关工具类发送邮件时,使用的默认是starttls加密。打开邮件原文能够看到,这种加密方式在传输html纯文本时,仅仅加密了文本内容,css相关都没有进行加密,我们应该使用一种更安全的加密方式,使用base64。


二、实现

直接使用java mail实现加密功能。


1.引入

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

2.配置


2.1创建配置文件

import java.util.Properties;
...
        	Properties props = new Properties();
	        props.put("mail.smtp.host", "smtp.qq.com");//	SMTP主机名
        	props.put("mail.smtp.port", "587");//	主机端口号 QQ邮箱
        	props.put("mail.smtp.auth", "true");//	是否需要用户认证

2.2创建会话

import javax.mail.Session;
...
  			Session session = Session.getInstance(props,new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(账户名,授权码);
            }
        });
        session.setDebug(true);

2.3创建内容并发送

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
...
  
        MimeMessage message = new MimeMessage(session);
        message.setSubject("主题");
        message.setFrom(new InternetAddress("账户名"));
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("1649875269@qq.com"));

        BodyPart textPart = new MimeBodyPart(); //内容
        String str = "邮件内容"
        textPart.setContent(str,"text/html;charset=utf-8");
				//正文的加密和配置的任何加密都无关 只需要在这设置base64加密
        textPart.setHeader("Content-Transfer-Encoding", "base64"); 

        MimeBodyPart attachmentPart = new MimeBodyPart();  //附件
        String filename = "附件位置";
        DataSource source = new FileDataSource(filename);
        attachmentPart.setDataHandler(new DataHandler(source));
        attachmentPart.setFileName(MimeUtility.encodeText("指定附件名称"));
        attachmentPart.setHeader("Content-Transfer-Encoding", "base64") ;//base64加密

        Multipart multipart = new MimeMultipart();	//添加传输内容
        multipart.addBodyPart(textPart);
        multipart.addBodyPart(attachmentPart);
        message.setContent(multipart);
        
        Transport.send(message);  //	发送

三、结果

实现了正文内容的base64加密,也实现了附件的base64加密。

Java发送邮件——加密_mail_02