標籤:java發送郵件 實現多附件內嵌圖片郵件功能 commons-email使用 commons-email發郵件 commons-email
前言
java實現發郵件功能,其實SUN在javaEE的開發包裡給我們提供了相關的工具,利用 mail.jar 和 activation.jar可以實現這個功能,n年前包括我第一次實習的時候項目上也是用SUN提供的包實現的,實現起來比較繁瑣麻煩,今天我們就用Apache的工具包commons-email包來實現發送帶郵件和內嵌圖片的功能,它是把前者做了下封裝,使用起來更加的簡易方便明了,所以我們使用commons-email來實現發送郵件的功能,必須也引入mail.jar,activation.jar2個依賴包,MyEclipse中是內建的,所以你如果不知道commons-email.jar還需要依賴這個2個包的話,一旦把項目換到其他開發環境中,可能就出現ClassNotFund異常,不知道的你可能可能還在鬱悶之中呢,這裡給大家提供一下這三個jar包免費:java郵件功能jar包免費下載,好了廢話,不多說,直接切入代碼,代碼中我注釋的很詳盡,就不做多餘的解釋了,大家一看就明白了。
說明
由於時間緊,一直忙於項目的封閉開發,所以先直接貼出實現代碼和測試代碼,暫時不做排版和各個功能代碼的說明和注意事項,不過代碼注釋已非常詳盡,大家一看就會明白的,等有時間了會對博文做進一步的修色和排版、代碼的說明以方面大家更好的理解和掌握,如有什麼疑問或建議,歡迎留言!
實現代碼:
package sendemail;import java.net.MalformedURLException;import java.net.URL;import java.util.Map;import javax.mail.MessagingException;import org.apache.commons.mail.EmailAttachment;import org.apache.commons.mail.EmailException;import org.apache.commons.mail.HtmlEmail;import org.apache.commons.mail.ImageHtmlEmail;import org.apache.commons.mail.resolver.DataSourceUrlResolver;public class Email {//郵箱伺服器的登入使用者名稱private static String username="[email protected]";//郵箱伺服器的密碼private static String password="zhangchen713115";//郵箱伺服器smtp host,此處採用自己的QQ郵箱作為郵件伺服器private static String smtpHost="smtp.qq.com";//發送方的郵箱(必須為郵箱伺服器的登入使用者名稱)private static String fromEmail="[email protected]";//發送方姓名private static String fromUsername="某某公司";//郵件內容編碼,防止亂碼private static String charset="UTF-8";/** *java發送郵件-commons-email * @param nameAndAddrMap 使用者名稱及對應的郵箱組成的Map * @param subject 郵件主題或標題 * @param htmlContent 郵件內容html格式 * @throws EmailException * @throws MessagingException * @author chenleixing */public static void sendEmail(Map<String,String> nameAndAddrMap,String subject,String htmlContent)throws EmailException, MessagingException{ //SimpleEmail email = new SimpleEmail();//建立簡單郵件,不可附件、HTML文本等//MultiPartEmail email = new MultiPartEmail();//建立能加附件的郵件,可多個、網路附件亦可/*ImageHtmlEmail:HTML文本的郵件、通過2代碼轉轉內聯圖片, 1.3新增的,但我怎麼也測試不成功 ImageHtmlEmail網上都是官網上例子而官網上例子比較模糊 ImageHtmlEmail email=new ImageHtmlEmail();*/HtmlEmail email = new HtmlEmail();//建立能加附件內容為HTML文本的郵件、HTML直接內聯圖片但必須用setHtmlMsg()傳郵件內容 //email.setDebug(true);//是否開啟調試預設不開啟 email.setSSLOnConnect(true);//開啟SSL加密 email.setStartTLSEnabled(true);//開啟TLS加密 //設定smtp host,此處採用自己的QQ郵箱作為郵件伺服器 email.setHostName(Email.smtpHost); //登入郵件伺服器的使用者名稱和密碼(保證郵件伺服器POP3/SMTP服務開啟) email.setAuthentication(Email.username, Email.password); email.setFrom(Email.fromEmail,Email.fromUsername);//發送方for(Map.Entry<String, String> map:nameAndAddrMap.entrySet()){//遍曆使用者名稱及對應的郵箱地址組成的mapemail.addTo(map.getValue(),map.getKey());//接收方郵箱和使用者名稱}//email.addCc("[email protected]");//抄送方//email.addBcc("[email protected]");//秘密抄送方email.setCharset(Email.charset);//設定郵件的字元集為UTF-8防止亂碼email.setSubject(subject);//主題email.setHtmlMsg(htmlContent);//郵件內容:<font color='red'>測試簡單郵件發送功能!</font>/*HtmlEmail、ImageHtmlEmail有setHtmlMsg()方法,且可以直接內聯圖片,可網上都搞那麼複雜說不行如 *<img src='http://www.apache.org/images/asf_logo_wide.gif' />本人測試新浪、搜狐、QQ郵箱等都能顯示 */ /*//如果使用setMsg()傳郵件內容,則HtmlEmail內嵌圖片的方法 URL url = new URL("http://www.jianlimuban.com/圖片"); String cid = email.embed(url, "名字"); email.setHtmlMsg("<img src='cid:"+cid+"' />");*///這是ImageHtmlEmail的內嵌圖片方法,我多次測試都不行,官網提供比較模糊,而大家都是用官網舉的例子//內嵌圖片,此處會拋出MessagingException, MalformedURLException異常//URL url=new URL("http://www.apache.org");//定義你基本URL來解決相對資源的位置//email.setDataSourceResolver(new DataSourceUrlResolver(url));//這樣HTML內容裡如果有此路徑下的圖片會直接內聯 //建立郵件附件可多個 EmailAttachment attachment = new EmailAttachment();//建立附件 attachment.setPath("D:\\MongoDB.txt");//本地附件,絕對路徑 //attachment.setURL(new URL("http://www.baidu.com/moumou附件"));//可添加網路上的附件 attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("MongoDB入門精通");//附件描述 attachment.setName("NoSQL資料庫");//附件名稱 email.attach(attachment);//添加附件到郵件,可添加多個 email.attach(attachment);//添加附件到郵件,可添加多個 /*email.buildMimeMessage();//構建內容類型 , //設定內容的字元集為UTF-8,先buildMimeMessage才能設定內容文本 ,但不能發送HTML格式的文本 email.getMimeMessage().setText("<font color='red'>測試簡單郵件發送功能!</font>","UTF-8");*/ email.send();//發送郵件 }} 測試代碼:
package sendemail;import java.util.Map;import org.junit.Test;import com.google.common.collect.Maps;public class EmailTest {@Testpublic void testSendSimpleEmail(){//使用者名稱和對應的郵箱Map<String,String> nameAndAddrMap=Maps.newHashMap();//建立一個mapnameAndAddrMap.put("張三","chen*****@sina.com");nameAndAddrMap.put("李四","leixing*****@163.com");nameAndAddrMap.put("王麻子","chenxing*****@qq.com");String htmlContent="<font color='red'>測試簡單郵件發送功能!</font>";//郵件內容String subject="新年好!";//主題或者標題try {Email.sendEmail(nameAndAddrMap,subject,htmlContent);//測試發送郵件功能} catch( Exception e) {System.out.println("郵件發送失敗!");//logger.setMessage(e.getMessage());}}}
轉載請註明—Java我人生(陳磊興) 原文出處:http://blog.csdn.net/chenleixing/article/details/44708533
最後,認真看過的網友們,大神們,如有感覺我這個程式猿有哪個地方說的不對或者不妥或者你有很好的提
議或者建議或點子方法,還望
您大恩大德施捨n秒的時間留下你的寶貴文字(留言),以便你,我,還有廣大的
程式猿們更快
地成長與進步.......
java實現發送郵件可多個附件內嵌圖片-commons-email使用