百度
未知原因仍然无法解决附件名称改变的问题,
由于使用的springBoot在配置文件中配置了
在这里 账号密码用了读取配置的方法
oldSendMail方法为寻找到的原型,
sendMail为修改后的方法
package com.qgil.ums.com.utils; import java.security.GeneralSecurityException; import java.util.Properties; 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 com.alibaba.druid.util.StringUtils; import com.sun.mail.util.MailSSLSocketFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; /** * 发送邮件工具类 * * @author tp * */ @Component public class EmailUtil { @Autowired private JavaMailSender mailSender; @Value("${spring.mail.password}") private String password; /** * 发送带附件的邮件 * * @param to 收件人 * @param subject 邮件主题 * @param msg 邮件内容 * @param filename 附件地址 * @return * @throws GeneralSecurityException */ public boolean sendMail(String from,String to, String subject, String msg, String filename) throws Exception { if (StringUtils.isEmpty(to)) { return false; } if (StringUtils.isEmpty(subject)){ return false; } if (StringUtils.isEmpty(msg)){ msg = ""; } // 创建默认的 MimeMessage 对象 MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(msg, true); // 创建消息部分 BodyPart messageBodyPart = new MimeBodyPart(); // 消息 messageBodyPart.setText(msg); // 创建多重消息 Multipart multipart = new MimeMultipart(); // 设置文本消息部分 multipart.addBodyPart(messageBodyPart); if(filename != null) { multipart = setFile(filename,multipart); } // 发送完整消息 message.setContent(multipart); // 发送消息 mailSender.send(message); return true; } catch (MessagingException e) { e.printStackTrace(); } return false; } /** * 发送带附件的邮件 * @param from 发件人 * @param to 收件人 * @param subject 邮件主题 * @param msg 邮件内容 * @param filename 附件地址 * @return * @throws GeneralSecurityException */ public boolean oldSendMail(String from,String to, String subject, String msg, String filename) throws GeneralSecurityException { if (StringUtils.isEmpty(to)) { return false; } if (StringUtils.isEmpty(msg)){ msg = ""; } /* * 2.配置协议 * */ Properties props = new Properties(); //协议 props.setProperty("mail.transport.protocol", "smtp"); //服务器 props.setProperty("mail.smtp.host", "smtp.126.com"); //端口 props.setProperty("mail.smtp.port", "25"); //使用smtp身份验证 props.setProperty("mail.smtp.auth", "true"); //使用SSL,企业邮箱必需! //开启安全协议 MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); } catch (GeneralSecurityException e1) { e1.printStackTrace(); } props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); //发送邮箱账号密码 Session session = Session.getDefaultInstance(props, new MyAuthenricator(from, password)); try { // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From: 头部头字段 message.setFrom(new InternetAddress(from)); // Set To: 头部头字段 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set Subject: 主题文字 message.setSubject(subject); // 创建消息部分 BodyPart messageBodyPart = new MimeBodyPart(); // 消息 messageBodyPart.setText(msg); // 创建多重消息 Multipart multipart = new MimeMultipart(); // 设置文本消息部分 multipart.addBodyPart(messageBodyPart); if(filename != null) { multipart = setFile(filename,multipart); } // 发送完整消息 message.setContent(multipart); // 发送消息 Transport.send(message); return true; } catch (MessagingException e) { e.printStackTrace(); } /*catch (UnsupportedEncodingException e) { e.printStackTrace(); }*/ return false; } public Multipart setFile(String filename,Multipart multipart) throws MessagingException { // 附件部分 BodyPart messageBodyPart = new MimeBodyPart(); // 设置要发送附件的文件路径 DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); // messageBodyPart.setFileName(filename); // 处理附件名称中文(附带文件路径)乱码问题 messageBodyPart.setFileName(source.getName()); multipart.addBodyPart(messageBodyPart); return multipart; } //用户名密码验证,需要实现抽象类Authenticator的抽象方法PasswordAuthentication static class MyAuthenricator extends Authenticator { String u = null; String p = null; public MyAuthenricator(String u,String p){ this.u=u; this.p=p; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(u,p); } } }
解决附件名称过长,导致附件名称变化的问题