貼代碼:html
1 import javax.activation.DataHandler; 2 import javax.activation.FileDataSource; 3 import javax.mail.*; 4 import javax.mail.internet.*; 5 import java.util.Date; 6 import java.util.Properties; 7 import java.util.logging.Logger; 8 9 /** 10 * @author kabuqinuo 11 * @date 2018/7/18 8:53 12 */ 13 /*發送郵件工具類*/ 14 public class SendMailUtil { 15 16 private static Logger logger = Logger.getLogger(String.valueOf(SendMailUtil.class)); 17 18 19 //測試方法 20 public static void main(String[] args) throws Exception { 21 //boolean a = SendMailUtil.getContenet("18-4-25","上海") 22 String to = "xxx@qq.com";//接收人 23 boolean a = SendMailUtil.sendMails("郵件的標題","發送人",to,"(抄送人郵箱可多個可爲空)","(密送人郵箱可多個可爲空)",SendMailUtil.getContenet(),"(附件可爲空)"); 24 System.out.println(a); 25 } 26 27 28 //獲取發送的內容 29 public static String getContenet(){ 30 String content = ""; 31 content = "要發送的郵件內容"; 32 return content; 33 } 34 35 /* 36 * 設置發送email的基本參數 37 * @param title 郵件標題 38 * @param personal 發送人(郵箱上顯示的發送人名稱) 39 * @param to 收件人郵箱 40 * @param copys 抄送人郵箱 41 * @param blind 密送人郵箱 42 * @param content 郵件內容 43 * @param file 附件 44 * @return 45 * @throws Exception 46 */ 47 public static boolean sendMails(String title, String personal,String to,String copys,String blind,String content,String file) { 48 Properties prop = new Properties(); 49 prop.setProperty("mail.host", "smtp.sina.com");// 設置服務器地址 50 prop.setProperty("mail.transport.protocol", "smtp");// 郵件發送協議 51 prop.setProperty("mail.smtp.auth", "true");// 是否要求身份認證 52 prop.setProperty("mail.smtp.port", "25"); // SMTP郵件服務器默認端口 53 //使用JavaMail發送郵件的5個步驟 54 //一、建立session 55 Session session = Session.getInstance(prop); 56 //開啓Session的debug模式,這樣就能夠查看到程序發送Email的運行狀態 57 session.setDebug(true); 58 //二、經過session獲得transport對象 59 Transport ts = null; 60 try { 61 ts = session.getTransport(); 62 //三、使用郵箱的用戶名和密碼連上郵件服務器,發送郵件時,發件人須要提交郵箱的用戶名和密碼給smtp服務器,用戶名和密碼都經過驗證以後纔可以正常發送郵件給收件人。 63 try { 64 ts.connect("smtp.sina.com", "xxxx@qq.com", "xxx");//發送者的郵箱及密碼 65 } catch (MessagingException e) { 66 logger.info("鏈接郵件服務器錯誤:"); 67 throw new AdminException(ResultEnum.CONNECTION_FAIL); 68 } 69 } catch (NoSuchProviderException e) { 70 logger.info("鏈接郵件服務器錯誤:"); 71 throw new AdminException(ResultEnum.CONNECTION_FAIL); 72 } 73 //四、建立郵件 74 Message message; 75 try { 76 if (file == null || file.isEmpty()){ 77 message = createSimple(session, title, personal, to, copys, blind, content); 78 }else{ 79 message = createSimplees(session, title, personal, to, copys, blind, content,file); 80 } 81 //五、發送郵件 82 ts.sendMessage(message, message.getAllRecipients()); 83 ts.close(); 84 return true; 85 }catch (Exception e){ 86 e.printStackTrace(); 87 } 88 return false; 89 } 90 91 /* 92 * 發送郵件(純文本) 93 * @param session 94 * @param title 郵件標題 95 * @param personal 發送人(郵箱上顯示的發送人名稱) 96 * @param to 收件人郵箱 97 * @param copys 抄送人郵箱 98 * @param blind 密送人郵箱 99 * @param content 郵件內容 100 * @return 101 * @throws Exception 102 */ 103 private static MimeMessage createSimple(Session session,String title, String personal, String to, String copys, String blind, String content) throws Exception { 104 MimeMessage message = new MimeMessage(session); 105 //指明郵件的發件人 106 message.setFrom(new InternetAddress("xxx@qq.com", personal, "UTF-8")); 107 //指明郵件的收件人,如今發件人和收件人是同樣的,那就是本身給本身發 108 InternetAddress[] tos = new InternetAddress().parse(to); 109 message.setRecipients(Message.RecipientType.TO,tos); 110 //預防一個無語的錯誤:554 DT:SPM 111 //message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse("myCenter@163.com")); 112 //抄送 113 if (copys != null && !copys.isEmpty()){ 114 InternetAddress[] cc = new InternetAddress().parse(copys); 115 message.setRecipients(Message.RecipientType.CC,cc); 116 } 117 if (blind != null && blind.isEmpty()){ 118 InternetAddress[] bcc = new InternetAddress().parse(blind); 119 message.setRecipients(Message.RecipientType.BCC,bcc); 120 } 121 //設置發送時間 122 message.setSentDate(new Date()); 123 //郵件的標題 124 message.setSubject(title); 125 //郵件的文本內容 126 message.setContent(content, "text/html;charset=UTF-8"); 127 // 保存並生成最終的郵件內容 128 message.saveChanges(); 129 //返回建立好的郵件對象 130 return message; 131 } 132 133 /* 134 * 發送郵件(帶附件) 135 * @param session 136 * @param title 郵件標題 137 * @param personal 發送人(郵箱上顯示的發送人名稱) 138 * @param to 收件人郵箱 139 * @param copys 抄送人郵箱 140 * @param blind 密送人郵箱 141 * @param content 郵件內容 142 * @param file 附件 143 * @return 144 * @throws Exception 145 */ 146 private static MimeMessage createSimplees(Session session,String title, String personal, String to, String copys, 147 String blind, String content,String file) throws Exception { 148 MimeMessage message = new MimeMessage(session); 149 //指明郵件的發件人 150 message.setFrom(new InternetAddress("xxx@qq.com", personal, "UTF-8")); 151 //指明郵件的收件人,發件人和收件人是同樣的,那就是本身給本身發 152 InternetAddress[] tos = new InternetAddress().parse(to); 153 message.setRecipients(Message.RecipientType.TO,tos); 154 //抄送 155 if (copys != null && !copys.isEmpty()){ 156 InternetAddress[] cc = new InternetAddress().parse(copys); 157 message.setRecipients(Message.RecipientType.CC,cc); 158 } 159 if (blind != null && blind.isEmpty()){ 160 InternetAddress[] bcc = new InternetAddress().parse(blind); 161 message.setRecipients(Message.RecipientType.BCC,bcc); 162 } 163 //設置發送時間 164 message.setSentDate(new Date()); 165 //郵件的標題 166 message.setSubject(title); 167 168 // 要求閱讀回執(收件人閱讀郵件時會提示回覆發件人,代表郵件已收到,並已閱讀) 169 message.setHeader("Disposition-Notification-To", "xxx@qq.com"); 170 171 MimeBodyPart text = new MimeBodyPart(); 172 text.setContent(content, "text/html;charset=UTF-8"); 173 174 //建立郵件附件 175 MimeBodyPart attach = new MimeBodyPart(); 176 DataHandler dh = new DataHandler(new FileDataSource(file)); 177 attach.setDataHandler(dh); 178 attach.setFileName(MimeUtility.encodeWord(dh.getName())); 179 180 //建立容器描述數據關係 181 MimeMultipart mp = new MimeMultipart(); 182 mp.addBodyPart(text); 183 mp.addBodyPart(attach); 184 mp.setSubType("mixed"); 185 186 message.setContent(mp); 187 message.saveChanges(); 188 189 190 //返回建立好的郵件對象 191 return message; 192 } 193 }
以上是一個郵件發送的實例,能夠純文本發送郵件 也能夠帶着附件發送,至於帶圖片的 尚未寫。java
用以上實例本人以前用於企業發送郵件,因此發送者的郵箱可密碼是寫死的,在64行,若是想自由定義發送人的郵箱和密碼,可將其上代碼稍微改改,把發送者的郵箱和密碼參數提取出來。服務器
以上代碼中的某些命名和項目中的某些字段衝突 因此稍微改了改。session
若是直接拿以上代碼來用,會缺乏一個異常處理類,這個異常處理類就是項目的整個異常處理工具,簡單來講就是拋出錯誤提示。其餘沒什麼問題,本人親測。ide