java 实现发送邮件(带中文附件名称)
java 实现发送邮件(带中文附件名称)
代码如下:
/** * 发送带附件的邮件 * * @param session 发件人信息 * @param from 发件人地址 * @param subject 邮件标题 * @param content 邮件内容 * @param recipients 收件人地址 */ public static void sendFileMail(Session session, String from, String recipients, String subject, String content, List<File> attachments) { MimeMessage message = new MimeMessage(session); try { System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); // 创建多重消息 Multipart multipart = new MimeMultipart(); message.setFrom(new InternetAddress(from)); // 邮件标题 message.setSubject(subject); // 添加邮件正文 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent(content, "text/html;charset=UTF-8"); multipart.addBodyPart(contentPart); message.setSentDate(new Date()); // 创建邮件的接收者地址,并设置到邮件消息中 Address to = new InternetAddress(recipients); // Message.RecipientType.TO属性表示接收者的类型为TO message.setRecipient(Message.RecipientType.TO, to); // 添加附件的内容 if (attachments != null) { for (int i = 0; i < attachments.size(); i++) { BodyPart attachmentBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(attachments.get(i)); attachmentBodyPart.setDataHandler(new DataHandler(source)); // MimeUtility.encodeWord可以避免文件名乱码 attachmentBodyPart.setFileName(MimeUtility.encodeText(attachments.get(i).getName())); multipart.addBodyPart(attachmentBodyPart); } } // 发送完整消息 message.setContent(multipart); Transport.send(message); } catch (Exception e) { e.printStackTrace(); } }
测试类如下:
注意:中文附件名称有可能出现乱码,以下两行代码可以解决乱码问题。
System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); attachmentBodyPart.setFileName(MimeUtility.encodeText(attachments.get(i).getName()));