出现问题的地方
MimeMessage mimeMsg;
//添加附件
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename[i]);
bp.setDataHandler(new DataHandler(fileds));
//bp.setFileName(MimeUtility.encodeWord(fileds.getName()));
bp.setFileName(MimeUtility.encodeText(fileds.getName(),"utf-8",null));//设置附件名编码
MimeMessage属于javax.mail下。
尝试修改编码后qq邮箱,gmail邮箱等并没有解决乱码问题。
修改方法
使用了org.springframework.mail。
添加maven依赖
//引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
邮件发送
@Autowired
private JavaMailSender mailSender;
/**
* 发送邮件
* @param from 发送者
* @param to 接收者
* @param subject 主题
* @param text 内容
* @param fileMap 附件
* @return
*/
public void send (String from, String to, String subject,String text,HashMap<String,String> fileMap) {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(text,true);
for (Map.Entry<String,String> entry:fileMap.entrySet()) {
mimeMessageHelper.addAttachment(entry.getKey(),new File(entry.getValue()));
}
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
spring boot配置
注意配置文件的缩进,还有mail配置在spring下。
spring:
mail:
host: server mail address
username: wei@shuang.com
password: wei
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
ssl:
enable: true
display:
sendmail: wei
配置由框架读取指定值 ,所以要注意拼写
问题原因
暂时没有去查为什么javax的mail会有这个问题,或者如何去解决。有空再去翻翻。