java郵件自動傳送時新增網路附件
阿新 • • 發佈:2019-02-01
查了很多資料都是使用本地資源作為附件傳送。但是資料和程式分開時,還需要先下載資料,儲存到本地再發送郵件。查了很多資料後,發現apach提供了很好的一個commons-mail.jar包,做了很好的封裝,簡單易用。下載地址是http://commons.apache.org/proper/commons-email/download_email.cgi
public void sendHtmlEmailWithImg() throws Exception { String htmlEmailContent = "這是一張用於測試的圖片,請查收。 <img src=\"D:/1.png\"> " + " <img src=\"http://commons.apache.org/proper/commons-email/images/commons-logo.png\">"; ImageHtmlEmail email = new ImageHtmlEmail();//用ImageHtmlEmail來發送 email.setDebug(true);//可以看到執行過程的debug資訊 email.setCharset("UTF-8");//防止亂碼 email.setSSLCheckServerIdentity(true); email.setSslSmtpPort("465"); // 設定SSL埠 //解析本地圖片和網路圖片都有的html檔案重點就是下面這兩行; //ImageHtmlEmail通過setDataSourceResolver來識別並嵌入圖片 //檢視DataSourceResolver的繼承結構發現有幾個好用的子類 DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[]{new DataSourceFileResolver(),//新增DataSourceFileResolver用於解析本地圖片 new DataSourceUrlResolver(new URL("http://"))};//新增DataSourceUrlResolver用於解析網路圖片,注意:new URL("http://") //DataSourceCompositeResolver類可以加入多個DataSourceResolver, //把需要的DataSourceResolver放到一個數組裡傳進去就可以了; email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers)); // 郵箱登陸資訊 email.setHostName("smtp.qq.com"); email.addTo("*@qq.com", "Jo"); email.setFrom("*@qq.com", "Me"); // 必須和登陸郵箱名一致,否則會報錯 email.setAuthenticator(new DefaultAuthenticator("*@qq.com", "********")); // 郵箱名和登陸密碼 email.setSubject("傳送一張圖片,看看是否可以收到。"); email.setHtmlMsg(htmlEmailContent); //如果客戶端不去持HTML格式會顯示這句話,不過應該很少有不支援HTML格式的客戶端了吧 email.setTextMsg("你的郵箱客戶端不支援HTML格式郵件"); email.send(); }
如果使用QQ郵箱做測試需要注意,QQ郵箱對圖片顯示不太友好,需要點選顯示圖片才能顯示。
ImageHtmlEmail也可以直接新增網路資源作為附件
/** * 為郵件新增附件 * @param email 郵件 * @param urls 附件連結 * @param names 附件名稱,最好有後綴名才能預覽檔案 */ public void addAttachment(ImageHtmlEmail email, List<String> urls, List<String> names) { // 保證附件名的長度和連結一一對應 while(urls.size() > names.size()) { names.add(""); } for(int i = 0; i < urls.size(); i++) { EmailAttachment attachment = new EmailAttachment(); try { attachment.setURL(new URL(urls.get(i))); attachment.setDisposition(EmailAttachment.ATTACHMENT); // attachment.setDescription("Apache logo"); attachment.setName(names.get(i)); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { email.attach(attachment); // 將附件新增到郵件中 } catch (EmailException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }