JavaMailSender发送邮件 附件未能发送问题
最近要做一个面试通过发放offer的功能,笔者想到了用JavaMailSender来实现,途中遇到了发送邮件的坑,记录一下这个对api不熟悉引发的弱智问题╰(‵□′)╯
话不多说先上错误代码
因为初始的发送会产生乱码,为了避免出现乱码的问题,笔者设置了文件的格式以及编码,效果立竿见影
message.setText(content, "utf-8", "html");
没使用之前
使用后
乱码问题得到了解决
之前一直没有上传文件和设置抄送人,既然可以正常发送 抄送和附件也一并测试
重头戏来了
试了N遍之后,发现只能抄送没有附件信息!
做了好多无用的操作后,才发现带附件的设置编码格式需要在↓设置!都是不熟悉api吃的亏啊!
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
正确的代码如下
/**
* 发送邮件
*
* @param to 收件人
* @param cc 抄送人列表
* @param subject 主体
* @param content 内容
* @param filePaths 文件路径列表
* @throws IOException
* @throws MessagingException
*/
public static void sendMail(String to, List<String> cc, String subject, String content, List<String> filePaths) throws IOException, MessagingException {
if (to == null) {
throw new ServiceException("收件人不能为空!");
}
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(HOST);
mailSender.setUsername(USERNAME);
mailSender.setPort(PORT);
mailSender.setPassword(PASSWORD);
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", String.valueOf(AUTH));
properties.setProperty("mail.smtp.starttls.enable", String.valueOf(STARTTLS_ENABLE));
properties.setProperty("mail.smtp.starttls.required", "true");
properties.setProperty("mail.smtp.ssl.enable", String.valueOf(SSL_ENABLE));
properties.setProperty("mail.smtp.timeout", String.valueOf(TIMEOUT));
properties.put("mail.smtp.socketFactory.port", PORT);
properties.put("mail.smtp.socketFactory.class", SOCKET_FACTORY_CLASS);
mailSender.setJavaMailProperties(properties);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setFrom(USERNAME);
helper.setTo(to);
// 设置抄送人列表
if (cc != null) {
helper.setCc(cc.toArray(new String[0]));
}
helper.setSubject(subject);
if (filePaths != null && !filePaths.isEmpty()) {
for (String filePath : filePaths) {
File file = new File(filePath);
FileSystemResource fileSystemResource = new FileSystemResource(file);
helper.addAttachment(file.getName(), fileSystemResource);
}
}
helper.setText(content, true);
mailSender.send(message);
}
