邮件可以抽象为信封、邮件和邮件体。
public String[] sendHtmlWithImg(String subject, String htmlText, ArrayList imgs, String[] mails) { String[] result = {"", ""}; Session session = null; Message message = null; MimeMultipart multipart = null; Transport transport = null; props = new Properties(); //props.put("mail.transpost.protocol", "smtp"); props.put("mail.smtp.port", "25"); props.put("mail.smtp.auth", "false"); try { session = Session.getDefaultInstance(props, null); session.setDebug(false); message = new MimeMessage(session); message.setSubject(subject); String[] tempArray = mails[0].split("`"); String fromMail = tempArray[0]; String fromPerson = tempArray[1]; String feedback = tempArray[2]; message.setFrom(new InternetAddress(fromMail, fromPerson)); //是否要求回执 if(feedback.equals("on.")) { message.setHeader("Disposition-Notification-To", fromMail); } tempArray = mails[1].split(";"); for(int i=0;i<tempArray.length;i++) { if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1) { continue; } message.addRecipient(Message.RecipientType.TO, new InternetAddress(tempArray[i])); } tempArray = mails[2].split(";"); for(int i=0;i<tempArray.length;i++) { if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1) { continue; } message.addRecipient(Message.RecipientType.CC, new InternetAddress(tempArray[i])); } tempArray = mails[3].split(";"); for(int i=0;i<tempArray.length;i++) { if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1) { continue; } message.addRecipient(Message.RecipientType.BCC, new InternetAddress(tempArray[i])); } BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setContent(htmlText, "text/html;charset=GBK"); multipart = new MimeMultipart("related"); multipart.addBodyPart(messageBodyPart); result[0] = "ok"; for(int i=0;i<imgs.size();i++) { String[] temp = (String[])imgs.get(i); String f = temp[0]; if (new File(f).exists()) { try{ DataSource fds = new FileDataSource(f); messageBodyPart = new MimeBodyPart(); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setHeader("Content-ID","<"+temp[1]+">"); multipart.addBodyPart(messageBodyPart); } catch (Exception e) { System.out.println(e); result[0] = "no"; result[1] = ("未知错误!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", " "); break; } } else { result[1] = ("系统找不到指定的文件:"+f).replaceAll("\r", " ").replaceAll("\n", " ").replaceAll("'", " "); } } message.setContent(multipart); message.saveChanges(); transport = session.getTransport("smtp"); transport.connect(currentMailServer, null, null); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException e) { System.out.println(e); result[0] = "no"; result[1] = ("无效邮件地址!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", " "); } catch (MessagingException e) { System.out.println(e); currentMailServer = MAIL_SMTP_HOST[1]; try { transport.connect(currentMailServer, null, null); transport.sendMessage(message, message.getAllRecipients()); transport.close(); result[0] = "ok"; } catch (MessagingException ex) { System.out.println(ex); currentMailServer = MAIL_SMTP_HOST[2]; try { transport.connect(currentMailServer, null, null); transport.sendMessage(message, message.getAllRecipients()); transport.close(); result[0] = "ok"; } catch (Exception ex2) { System.out.println(ex2); result[0] = "no"; result[1] = "邮件服务器繁忙,请稍候再试!"; } } } catch (Exception e) { e.printStackTrace(); result[0] = "no"; result[1] = ("未知错误!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", " "); } multipart = null; message = null; session = null; transport = null; //System.out.println("currentMailServer="+currentMailServer); return result; }