1 16 package dlog4j.util.mail; 17 18 import java.io.File ; 19 import java.io.UnsupportedEncodingException ; 20 import java.util.ArrayList ; 21 import java.util.Date ; 22 import java.util.Properties ; 23 24 import javax.activation.DataHandler ; 25 import javax.activation.DataSource ; 26 import javax.activation.FileDataSource ; 27 import javax.mail.Authenticator ; 28 import javax.mail.BodyPart ; 29 import javax.mail.Message ; 30 import javax.mail.MessagingException ; 31 import javax.mail.Multipart ; 32 import javax.mail.PasswordAuthentication ; 33 import javax.mail.SendFailedException ; 34 import javax.mail.Session ; 35 import javax.mail.Transport ; 36 import javax.mail.internet.InternetAddress ; 37 import javax.mail.internet.MimeBodyPart ; 38 import javax.mail.internet.MimeMessage ; 39 import javax.mail.internet.MimeMultipart ; 40 41 import org.htmlparser.Node; 42 import org.htmlparser.Parser; 43 import org.htmlparser.tags.ImageTag; 44 import org.htmlparser.util.ParserException; 45 46 50 public abstract class MailSender extends Authenticator { 51 52 private String username = null; private String userpasswd = null; protected BodyPart messageBodyPart = null; 55 protected Multipart multipart = new MimeMultipart ("related"); 56 protected MimeMessage mailMessage = null; 57 protected Session mailSession = null; 58 protected InternetAddress mailToAddress = null; 59 60 66 protected MailSender(String smtpHost, String username, String password) { 67 this(smtpHost,25,username,password); 68 } 69 76 protected MailSender(String smtpHost, int smtpPort, String username, String password) { 77 this.username = username; 78 this.userpasswd = password; 79 Properties mailProperties = System.getProperties(); 80 mailProperties.put("mail.smtp.host", smtpHost); 81 if(smtpPort>0 && smtpPort!=25) 82 mailProperties.put("mail.smtp.port", String.valueOf(smtpPort)); 83 mailProperties.put("mail.smtp.auth", "true"); mailSession = Session.getDefaultInstance(mailProperties, this); 85 mailMessage = new MimeMessage (mailSession); 86 messageBodyPart = new MimeBodyPart (); 87 } 88 96 public static MailSender getTextMailSender(String smtpHost, String username, String password) { 97 return getTextMailSender(smtpHost,25,username,password); 98 } 99 107 public static MailSender getTextMailSender(String smtpHost, int smtpPort, String username, String password) { 108 return new MailSender(smtpHost,smtpPort,username,password) { 109 public void setMailContent(String mailContent) throws MessagingException { 110 messageBodyPart.setText(mailContent); 111 multipart.addBodyPart(messageBodyPart); 112 } 113 }; 114 } 115 123 public static MailSender getHtmlMailSender(String smtpHost, String username, String password) { 124 return getHtmlMailSender(smtpHost,25,username,password); 125 } 126 134 public static MailSender getHtmlMailSender(String smtpHost, int smtpPort, String username, String password) { 135 return new MailSender(smtpHost,smtpPort,username,password) { 136 private ArrayList arrayList1 = new ArrayList (); 137 private ArrayList arrayList2 = new ArrayList (); 138 139 public void setMailContent(String mailContent) throws MessagingException { 140 String htmlContent = getContent(mailContent); 141 messageBodyPart.setContent(htmlContent, CONTENT_TYPE); 142 multipart.addBodyPart(messageBodyPart); 143 processHtmlImage(mailContent); 145 } 146 147 private void processHtmlImage(String mailContent) throws MessagingException { 149 for (int i = 0; i < arrayList1.size(); i++) { 150 messageBodyPart = new MimeBodyPart (); 151 DataSource source = new FileDataSource ((String ) arrayList1.get(i)); 152 messageBodyPart.setDataHandler(new DataHandler (source)); 153 String contentId = "<" + (String ) arrayList2.get(i) + ">"; 154 messageBodyPart.setHeader("Content-ID", contentId); 155 messageBodyPart.setFileName((String ) arrayList1.get(i)); 156 multipart.addBodyPart(messageBodyPart); 157 } 158 } 159 160 private String getContent(String mailContent) { 162 try { 163 Parser parser = Parser.createParser(new String (mailContent.getBytes(), ISO8859_1)); 164 Node[] images = parser.extractAllNodesThatAre(ImageTag.class); 165 for(int i=0;i<images.length;i++) { 166 ImageTag imgTag = (ImageTag) images[i]; 167 if(!imgTag.getImageURL().toLowerCase().startsWith("http://")) 168 arrayList1.add(imgTag.getImageURL()); 169 } 170 } catch (UnsupportedEncodingException e1) { 171 } catch (ParserException e) {} 172 String afterReplaceStr = mailContent; 173 for (int m = 0; m < arrayList1.size(); m++) { 175 arrayList2.add(createRandomStr()); 176 String addString = "cid:" + (String ) arrayList2.get(m); 177 afterReplaceStr = mailContent.replaceAll( 178 (String ) arrayList1.get(m), addString); 179 } 180 return afterReplaceStr; 181 } 182 183 private String createRandomStr() { 185 char[] randomChar = new char[8]; 186 for (int i = 0; i < 8; i++) { 187 randomChar[i] = (char) (Math.random() * 26 + 'a'); 188 } 189 String replaceStr = new String (randomChar); 190 return replaceStr; 191 } 192 private final static String CONTENT_TYPE = "text/html;charset=GB2312"; 193 private final static String ISO8859_1 = "8859_1"; 194 }; 195 } 196 200 protected PasswordAuthentication getPasswordAuthentication() { 201 return new PasswordAuthentication (username, userpasswd); 202 } 203 204 209 public void setSubject(String mailSubject) throws MessagingException { 210 mailMessage.setSubject(mailSubject); 211 } 212 213 218 public abstract void setMailContent(String mailContent) throws MessagingException ; 219 220 225 public void setSendDate(Date sendDate) throws MessagingException { 226 mailMessage.setSentDate(sendDate); 227 } 228 229 234 public void setAttachments(String attachmentName) throws MessagingException { 235 messageBodyPart = new MimeBodyPart (); 236 DataSource source = new FileDataSource (attachmentName); 237 messageBodyPart.setDataHandler(new DataHandler (source)); 238 int index = attachmentName.lastIndexOf(File.separator); 239 String attachmentRealName = attachmentName.substring(index + 1); 240 messageBodyPart.setFileName(attachmentRealName); 241 multipart.addBodyPart(messageBodyPart); 242 } 243 244 250 public void setMailFrom(String mailFrom, String sender) throws UnsupportedEncodingException , MessagingException { 251 if(sender!=null) 252 mailMessage.setFrom(new InternetAddress (mailFrom, sender)); 253 else 254 mailMessage.setFrom(new InternetAddress (mailFrom)); 255 } 256 257 263 public void setMailTo(String [] mailTo, String mailType) throws Exception { 264 for (int i = 0; i < mailTo.length; i++) { 265 mailToAddress = new InternetAddress (mailTo[i]); 266 if (mailType.equalsIgnoreCase("to")) { 267 mailMessage.addRecipient(Message.RecipientType.TO,mailToAddress); 268 } else if (mailType.equalsIgnoreCase("cc")) { 269 mailMessage.addRecipient(Message.RecipientType.CC,mailToAddress); 270 } else if (mailType.equalsIgnoreCase("bcc")) { 271 mailMessage.addRecipient(Message.RecipientType.BCC,mailToAddress); 272 } else { 273 throw new Exception ("Unknown mailType: " + mailType + "!"); 274 } 275 } 276 } 277 282 public void sendMail() throws MessagingException , SendFailedException { 283 if (mailToAddress == null) 284 throw new MessagingException ("请你必须你填写收件人地址!"); 285 mailMessage.setContent(multipart); 286 Transport.send(mailMessage); 287 } 288 289 293 public static void main(String args[]) { 294 String mailHost = "smtp.163.com"; String mailUser = "user1"; String mailPassword = "password1"; String [] toAddress = {"user1@163.com"}; 298 MailSender sendmail = MailSender.getHtmlMailSender(mailHost, mailUser,mailPassword); 300 try { 303 sendmail.setSubject("邮件发送测试"); 304 sendmail.setSendDate(new Date ()); 305 String content = "<H1>你好,中国</H1><img SRC=\"http://www.javayou.com/images/logo.gif\">"; 306 content+="<img SRC=\"D:/EclipseM7/workspace/JDlog/dlog/images/rss200.png\"/>"; 308 sendmail.setMailContent(content); sendmail.setAttachments("E:\\TOOLS\\pm_sn.txt"); 310 sendmail.setMailFrom("user1@163.com","发送者"); 311 sendmail.setMailTo(toAddress, "to"); 312 System.out.println("正在发送邮件,请稍候......."); 315 sendmail.sendMail(); 316 System.out.println("恭喜你,邮件已经成功发送!"); 317 } catch (Exception ex) { 318 ex.printStackTrace(); 319 } 320 } 321 322 323 } | Popular Tags |