/** * 发送邮件 * @param userEmail 发件邮箱 * @param myEmailPassword 邮箱密码,可能是授权码 * @param nickname 邮件发件人显示的名称 * @param myEmailSMTPHost 邮箱smtp地址 * @param theme 主题 * @param content 正文 * @param fileList 文件集合 * @param receiveMailList 收件人集合 * @throws Exception */ public static void createMimeMessage(String userEmail, String myEmailPassword, String nickname, String myEmailSMTPHost, String theme, String content, List<String> fileList,List<String> receiveMailList) throws Exception { System.setProperty("mail.mime.splitlongparameters","false"); Properties props = new Properties(); // 参数配置 props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 props.setProperty("mail.smtp.ssl.trust", myEmailSMTPHost); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.port", "25"); log.warn("邮件发送设置: " + props.toString()); Session session = Session.getInstance(props); // session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log // 1. 创建一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人 message.setFrom(new InternetAddress(userEmail, nickname, "UTF-8")); // 3. To: 收件人 // message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "王八蛋你好", "UTF-8")); List<InternetAddress> list = new ArrayList<InternetAddress>();// 不能使用string类型的类型,这样只能发送一个收件人 for (String receiveMailStr:receiveMailList) { list.add(new InternetAddress(receiveMailStr)); } InternetAddress[] address = list.toArray(new InternetAddress[list.size()]); message.setRecipients(Message.RecipientType.TO, address); // 4. Subject: 邮件主题 message.setSubject(theme, "UTF-8"); BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象 mdp.setContent(content, "text/html;charset=UTF-8");// 给BodyPart对象设置内容和格式/编码方式 Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart的对象,存放附件用的 mm.addBodyPart(mdp); MimeBodyPart filePart; FileDataSource filedatasource; // 逐个加入附件 for (String filePath:fileList) { filePart = new MimeBodyPart(); filedatasource = new FileDataSource(filePath); filePart.setDataHandler(new DataHandler(filedatasource)); try { // String filename = MimeUtility.encodeText(filedatasource.getName()); // filename = filename.replaceAll("\r", "").replaceAll("\n", ""); filePart.setFileName(MimeUtility.encodeText(filePath.substring(filePath.lastIndexOf(File.separator) + 1)));//此处设置了编码,防止文件发送出去以后文件名称乱码 } catch (Exception e) { e.printStackTrace(); } mm.addBodyPart(filePart); } // 5. Content: 带附件的邮件正文 message.setContent(mm); // 6. 设置发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges(); // 8. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); transport.connect(userEmail, myEmailPassword); // 9. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 10. 关闭连接 transport.close(); }
java 发送邮件 乱码修正版
最新推荐文章于 2023-09-24 21:15:37 发布