package cn.ksource.core.util; import cn.ksource.web.Constants; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.AuthenticationFailedException; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; /** * 发送邮件测试通过 * * @author 安道彪 */ public class EmailUtil { private static String fileName = Constants.APP_CONF_FILE; /** * * @param emails * @param title * @param content * @param fileNames * @throws Exception */ public static boolean sendEmail(String[] emails, String title,String content, String[] fileNames) throws Exception { String host = PropertyUtil.get(fileName, "host"); String username = PropertyUtil.get(fileName, "username"); String password = PropertyUtil.get(fileName, "password"); String from = PropertyUtil.get(fileName, "from"); boolean authentication = true; boolean flag = true; // 建立邮件会话 Properties pro = new Properties(); pro.put("mail.smtp.host", host);// 存储发送邮件的服务器 MyEmailAuther myEmailAuther = null; if (authentication){ // 是否到服务器用户名和密码验证 pro.put("mail.smtp.auth", "true"); myEmailAuther = new MyEmailAuther(username, password); } else{ pro.put("mail.smtp.auth", "false"); } Session s = Session.getInstance(pro, (Authenticator) myEmailAuther); // 根据属性新建一个邮件会话 // s.setDebug(true); //打开调试信息 MimeMessage message = new MimeMessage(s); // 由邮件会话新建一个消息对象 Transport transport = null; try { InternetAddress fromAddr = new InternetAddress(from); // 邮件发送地址 message.setFrom(fromAddr); // 设置发送地址 InternetAddress[] toAddr = new InternetAddress[emails.length]; for (int i = 0; i < emails.length; i++) { toAddr[i] = new InternetAddress(emails[i]); } message.setRecipients(Message.RecipientType.TO, toAddr); // 设置接收地址 BodyPart contentBodyPart = new MimeBodyPart(); contentBodyPart.setContent(content, "text/html;charset=GBK"); Multipart MimeMultipart = new MimeMultipart(); MimeMultipart.addBodyPart(contentBodyPart); if(fileNames!=null){ // 添加附件 for (int i = 0; i < fileNames.length; i++) { MimeBodyPart adjunct = new MimeBodyPart(); String filename = fileNames[i].split(",")[0]; // 选择出每一个附件名 String displayname = fileNames[i].split(",")[1]; FileDataSource fds = new FileDataSource(filename); // 得到数据源 adjunct.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart adjunct.setFileName(MimeUtility.encodeText(displayname)); // 得到文件名同样至入BodyPart MimeMultipart.addBodyPart(adjunct); } } message.setSubject(title); // 设置邮件标题 message.setContent(MimeMultipart); // 设置邮件正文 message.setSentDate(new Date()); // 设置发送日期 message.saveChanges(); // 保存邮件更改信息 System.out.println((authentication == false)); if (authentication) { transport = s.getTransport("smtp"); transport.connect(host, from, password); transport.sendMessage(message, message.getAllRecipients()); } else { Transport.send(message); } } catch (AuthenticationFailedException e) { System.out.println("用户名或密码不正确!"); e.printStackTrace(); flag = false; } catch (AddressException e) { System.out.println("地址错误!"); flag = false; } catch (MessagingException e) { System.out.println("消息发送错误,找不到服务器!"); flag = false; } catch (Exception e) { e.printStackTrace(); flag = false; }finally { try { transport.close(); } catch (MessagingException e) { System.out.println("transport关闭错误!"); } } return flag; } public static void main(String[] args) { String sendTo[] = { "964509855@qq.com"}; try { EmailUtil.sendEmail(sendTo, "title", "content", null); } catch (Exception e) { e.printStackTrace(); } } } class MyEmailAuther extends Authenticator { private String username = null; private String pwd = null; public void setUsername(String username) { this.username = username; } public void setPwd(String pwd) { this.pwd = pwd; } public MyEmailAuther(String username, String pwd) { super(); setUsername(username); setPwd(pwd); } public PasswordAuthentication getPasswordAuthentication() { System.out.println("username: " + username + "\npwd: " + pwd); return new PasswordAuthentication(username, pwd); } }