公司項目上線都非要弄個什么數據核對,每天下班都要跑好多的規則sql,這不是重點,重點是跑完的結果還要郵件的形式發送給指定領導,
這不就是意味着一定要加班了嗎?必須要有對策!有同事提議不如寫一個發送郵件的程序得了,我同意了,所以這個類就在百度的幫助下誕生了。
哪里都挺成功的,測試的時候也OK了。萬萬沒想到呀!讓萬惡的別亂碼給陰了(發送附件如果附件有名稱有中文就會亂碼),出現問題最靠的住的還得是百度。
一行代碼輕松搞定,開心。
1 package com.heyt.util; 2 3 import javax.activation.DataHandler; 4 import javax.activation.DataSource; 5 import javax.activation.FileDataSource; 6 import javax.mail.*; 7 import javax.mail.internet.*; 8 import java.io.UnsupportedEncodingException; 9 import java.util.Properties; 10 11 12 public class JavaEMail { 13 14 private Properties props;//用來存儲一些郵件的屬性,設置幾個等待時間什么的。 15 private String[] params = new String[2];//用來存儲發件人和授權碼,要注意的是授權碼和密碼還不是一回事,這個我就吃了虧 16 //public JavaEMail(){} 17 18 /** 19 * @param transportType 郵件發送方式 20 * @param serviceType 服務器類型 21 * @param servicePort 服務器端口號 22 * @param fromEMail 發件人 23 * @param authPassword 授權碼 24 */ 25 public JavaEMail(String transportType,String serviceType,String servicePort,String fromEMail ,String authPassword) 26 { 27 28 // // 獲取默認的 Session 對象。 29 // 1.創建一個程序與郵件服務器會話對象 Session 30 Properties tProps = new Properties(); 31 tProps.put("mail.transport.protocol", transportType);//發件的默認方式是不是都是SMTP? 32 tProps.put("mail.smtp.host",serviceType );//smtp.exmail.qq.com 這個例子是qq的企業郵箱的服務器 33 tProps.put("mail.smtp.port", servicePort);//一般默認都是 25 34 // 指定驗證為true 35 tProps.setProperty("mail.smtp.auth", "true"); 36 // props.setProperty("mail.smtp.timeout","1000"); 37 tProps.put("mail.smtp.timeout", 100000);//這幾個參數很有必要 38 tProps.put("mail.smtp.connectiontimeout", 100000);//這幾個參數很有必要 39 tProps.put("mail.smtp.writetimeout",100000);//這幾個參數很有必要 40 props = (Properties) tProps.clone(); 41 params[0]=fromEMail;//如果可以最好弄一個加密的方式 42 params[1]=authPassword;//如果可以最好弄一個加密的方式 43 } 44 45 /*** 46 * 47 * @param mailTO 收件人集合,這個不可以為空,哈哈哈 48 * @param mailCC 抄送人集合,可以傳null,若果是null就當做沒有抄送 49 * @param contentTop 郵件標題,可以傳null,默認值是 "您有,一封郵件待查收" 50 * @param contentText 郵件正文,可以傳null,默認值是 "各位好:" 51 * @param fileName 附件的絕對地址,可以傳null,如果是null就默認當做不添加附件 52 */ 53 public boolean sendEmail(String[] mailTO,String[] mailCC,String contentTop,String contentText,String fileName) 54 { 55 //收件人不能是空 56 if (mailTO == null || mailTO.equals("")) 57 return false; 58 // 驗證賬號及密碼,密碼需要是第三方授權碼,似乎qq企業郵件的授權碼就是密碼。 59 Authenticator auth = new Authenticator() { 60 @Override 61 public PasswordAuthentication getPasswordAuthentication() { 62 return new PasswordAuthentication(params[0], params[1]); 63 } 64 }; 65 Session session = Session.getInstance(props, auth);//居然發現了一個final的類,和String一樣,哈哈 66 67 try{ 68 // 創建默認的 MimeMessage 對象。 69 MimeMessage message = new MimeMessage(session); 70 71 Address addressesTO[] = new Address[mailTO.length]; 72 73 //循環收件人 74 for (int i = 0; i < mailTO.length ; i++) 75 { 76 addressesTO[i] = (Address) new InternetAddress(mailTO[i]).clone(); 77 } 78 message.addRecipients(Message.RecipientType.TO,addressesTO);//設置收件人 79 //對抄送人進行處理 80 if( ! (mailCC == null|| mailCC.equals(""))) { 81 Address addressesCC[] = new Address[mailCC.length]; 82 //循環抄送人 83 for (int i = 0; i < mailCC.length; i++) 84 { 85 addressesCC[i] = (Address) new InternetAddress(mailCC[i]).clone(); 86 } 87 message.addRecipients(Message.RecipientType.CC, addressesCC);//設置抄送人 88 } 89 // Set Subject: 頭字段 90 if(contentTop == null || contentTop.equals("")) 91 { 92 message.setSubject("您有,一封郵件待查收"); 93 }else { 94 message.setSubject(contentTop); 95 } 96 // 創建消息部分 97 BodyPart messageBodyPart = new MimeBodyPart(); 98 // 消息 99 if(contentText == null || contentText.equals("")){ 100 messageBodyPart.setText("各位好:"); 101 }else{ 102 messageBodyPart.setText(contentText); 103 } 104 // 創建多重消息 105 Multipart multipart = new MimeMultipart(); 106 // 設置文本消息部分 107 multipart.addBodyPart(messageBodyPart); 108 // String tFileName = fileName; 109 //目前沒有對目錄做校驗,后續再添加吧 110 if (!( fileName == null || fileName.equals(""))){ 111 // 附件部分 112 messageBodyPart = new MimeBodyPart(); 113 DataSource source = new FileDataSource(fileName); 114 messageBodyPart.setDataHandler(new DataHandler(source)); 115 //就只這行可以防止亂碼 116 String newFileName = MimeUtility.encodeText(source.getName(),"utf-8",null); 117 messageBodyPart.setFileName(newFileName); 118 multipart.addBodyPart(messageBodyPart); 119 } 120 121 // 發送完整消息 122 message.setContent(multipart,"text/html;charset=utf-8"); 123 // 發送消息 124 Transport.send(message); 125 126 System.out.println("Sent message successfully...."); 127 128 }catch (MessagingException mex) { 129 mex.printStackTrace(); 130 } catch (UnsupportedEncodingException e) { 131 e.printStackTrace(); 132 } 133 return true; 134 } 135 public static void main(String[] args) { 136 String[] mailTO = {"test","test1","test3"};//發送人 137 String[] mailCC = {"test","test1","test3"};//抄送人 138 String contentTop = "這是一個郵件的題目"; 139 String contentText = "這是這個郵件的正文"; 140 String fileName = "G:\\下載\\other\\";//如果有附件的話這填寫地址 141 new JavaEMail("1","2","3","4","5").sendEmail(mailTO,mailCC,contentTop,contentText,fileName); 142 } 143 } 144 145 146 147 /* 148 <!-- 發送郵件需要的jar java send mail --> 149 <dependency> 150 <groupId>javax.mail</groupId> 151 <artifactId>mail</artifactId> 152 <version>1.4.5</version> 153 </dependency> 154 <dependency> 155 <groupId>javax.activation</groupId> 156 <artifactId>activation</artifactId> 157 <version>1.1.1</version> 158 </dependency> */