1 package com.mall.information.pushemail; 2 3 import java.net.URL; 4 import java.net.URLEncoder; 5 import java.util.Date; 6 import java.util.Properties; 7 8 import javax.activation.DataHandler; 9 import javax.activation.DataSource; 10 import javax.activation.FileDataSource; 11 import javax.activation.URLDataSource; 12 import javax.mail.BodyPart; 13 import javax.mail.Message; 14 import javax.mail.MessagingException; 15 import javax.mail.Multipart; 16 import javax.mail.Session; 17 import javax.mail.Transport; 18 import javax.mail.internet.InternetAddress; 19 import javax.mail.internet.MimeBodyPart; 20 import javax.mail.internet.MimeMessage; 21 import javax.mail.internet.MimeMultipart; 22 import javax.mail.internet.MimeUtility; 23 24 25 import org.apache.commons.lang.StringUtils; 26 import org.apache.log4j.Logger; 27 28 public class EmailSender { 29 30 private static final Logger log = Logger.getLogger(EmailSender.class); 31 32 /** 33 * 获取附件名字 34 * 35 * @param fileName 36 * @return 37 */ 38 private static String getLastName(String fileName) { 39 int pos = fileName.lastIndexOf("\\"); 40 if (pos > -1) { 41 fileName = fileName.substring(pos + 1); 42 } 43 pos = fileName.lastIndexOf("/"); 44 if (pos > -1) { 45 fileName = fileName.substring(pos + 1); 46 } 47 return fileName; 48 49 } 50 51 /** 52 * 邮件批量发送 53 * @throws MessagingException 54 * @throws Exception 55 */ 56 public static boolean sendMail(String from, String pwd, String smtp, String mailTo, String mailSubject,String mailBody,String appendUrl,String apptitle,String nickname) { 57 // 发送email 58 Transport transport = null; 59 try { 60 String smtpServer = smtp;// smtp服务器地址 61 // String smtpServer = "smtp.163.com"; //smtp服务器地址 62 String From = from; // 来源的mail 63 String Subject = mailSubject; 64 String Text = mailBody; 65 //Properties props = System.getProperties(); 66 Properties props = new Properties(); 67 props.put("mail.smtp.host", smtpServer); 68 props.put("mail.smtp.auth", "true"); 69 log.info("正在创建mailsession......"); 70 Session sendMailSession = Session.getDefaultInstance(props); 71 // sendMailSession.setDebug(true); 72 log.info("正在创建MimeMessage......"); 73 74 Message newMessage = new MimeMessage(sendMailSession); 75 76 // newMessage.setFrom(new InternetAddress(From));//无昵称 77 newMessage.setFrom(new InternetAddress(From,nickname)); 78 79 newMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(mailTo)); 80 newMessage.setSubject(Subject); 81 newMessage.setSentDate(new Date()); 82 if(StringUtils.isEmpty(appendUrl)){ 83 //无附件 84 log.info("创建无附件邮件....."); 85 newMessage.setContent(Text, "text/html;charset=UTF-8"); 86 newMessage.saveChanges(); 87 }else{ 88 //带附件 89 log.info("创建带附件邮件....."); 90 Multipart multipart = new MimeMultipart("mixed"); 91 //设置邮件的文本内容 92 BodyPart contentPart = new MimeBodyPart(); 93 contentPart.setContent(mailBody,"text/html; charset=utf-8"); 94 multipart.addBodyPart(contentPart); 95 96 //添加附件 97 BodyPart messageBodyPart= new MimeBodyPart(); 98 99 //设置信件的附件1(本地文件作为附件) 100 //DataSource source = new FileDataSource(appendUrl); 101 102 //设置信件的附件2(用远程文件作为附件) 103 contentPart=new MimeBodyPart(); 104 URL urlfj=new URL(appendUrl); 105 URLDataSource source=new URLDataSource(urlfj); 106 107 //添加附件的内容 108 messageBodyPart.setDataHandler(new DataHandler(source)); 109 //添加附件的标题 110 //String apptitle = appendUrl.substring(appendUrl.lastIndexOf(‘/‘)+1); 111 //这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 112 // sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); 113 // messageBodyPart.setFileName(MimeUtility.encodeText("性能测试准备阶段调研清单20140122.doc")); 114 // String a = java.net.URLEncoder.encode("性能测试准备阶段调研清单20140122.doc", "UTF-8"); 115 // messageBodyPart.setFileName(java.net.URLDecoder.decode(a,"utf-8")); 116 // messageBodyPart.setFileName(apptitle); 117 messageBodyPart.setFileName(MimeUtility.encodeText(apptitle, "GBK", null)); 118 119 // System.out.println(messageBodyPart.getFileName()); 120 // messageBodyPart.setFileName("=?UTF-8?"+enc.encode(apptitle.getBytes())+"?="); 121 //sun.misc.BASE64Encoder bs64en = new sun.misc.BASE64Encoder(); 122 //String save = bs64en.encode(apptitle.getBytes()); 123 //String save_utf8 = URLEncoder.encode(save,"utf-8"); 124 125 //messageBodyPart.setFileName(save_utf8); 126 127 multipart.addBodyPart(messageBodyPart); 128 //将multipart对象放到message中 129 newMessage.setContent(multipart); 130 //保存邮件 131 newMessage.saveChanges(); 132 } 133 134 log.info("正在联接smtp......"); 135 136 transport = sendMailSession.getTransport("smtp"); 137 transport.connect(smtpServer, from, pwd); 138 log.info("Transport is connected : " + transport.isConnected()); 139 140 log.info("正在发送......" + mailTo + " " 141 + newMessage.getAllRecipients() + "----------------"); 142 transport.sendMessage(newMessage, newMessage.getAllRecipients()); 143 System.out.println("发送成功......"); 144 transport.close(); 145 } catch (Exception mailEx) { 146 log.info("Send Mail Error:" + mailEx.getMessage()); 147 mailEx.printStackTrace(); 148 log.info("================Send Mail Error:===========" + mailEx.getMessage()); 149 return false; 150 } finally { 151 try { 152 transport.close(); 153 154 } catch (MessagingException e) { 155 e.printStackTrace(); 156 } 157 } 158 return true; 159 } 160 161 /** 162 * 测试方法 163 * 164 * @param args 165 */ 166 public static void main(String[] args) { 167 //D:\space\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\MallManager\space/1394514922266.doc 168 // 169 // String url = "D:\\性能测试准备阶段调研清单20140122.doc"; 170 // String appendUrl = "D:\\space\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp1\\wtpwebapps\\MallManager\\space/1395387816920.txt"; 171 String appendUrl = "http://***/manager/space/2014/4/23/1.TXT"; 172 // System.out.println(url); 173 // System.out.println(url.substring(url.lastIndexOf(‘\\‘)+1)); 174 // String from, String pwd, String smtp, String mailTo, String mailSubject,String mailBody 175 // String apptitle = appendUrl.substring(appendUrl.lastIndexOf(‘/‘)+1); mail.ecitic.com 176177 // sendMail("***01@163.com","***","smtp.163.com","***03@163.com","!!!反反复复","qqq!!!@S反反复复<br type=‘_moz‘ />",appendUrl,"测试中文附件!@q11.js","测试昵称"); 178 // sendMail("**01@163.com","***","smtp.163.com","***03@163.com","!!!反反复复","qqq!!!@S反反复复<br type=‘_moz‘ />","","","测试昵称"); 179 } 180 }
原文:http://www.cnblogs.com/lixin890808/p/3904842.html