java實現發送郵件可多個附件內嵌圖片-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="642417953@qq.com"; //郵箱服務器的密碼 private static String password="1234567890"; //郵箱服務器smtp host,此處采用自己的QQ郵箱作為郵件服務器 private static String smtpHost="smtp.qq.com"; //發送方的郵箱(必須為郵箱服務器的登錄用戶名) private static String fromEmail="642417953@qq.com"; //發送方姓名 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()){//遍歷用戶名及對應的郵箱地址組成的map email.addTo(map.getValue(),map.getKey());//接收方郵箱和用戶名 } //email.addCc("chen_leixing@qq.com");//抄送方 //email.addBcc("leixing_chen@120.com");//秘密抄送方 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();//發送郵件 } } </pre>
測試代碼:
package sendemail;import java.util.Map; import org.junit.Test; import com.google.common.collect.Maps; public class EmailTest { @Test public void testSendSimpleEmail(){ //用戶名和對應的郵箱 Map<String,String> nameAndAddrMap=Maps.newHashMap();//新建一個map nameAndAddrMap.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()); } } } </pre>
出處:http://blog.csdn.net/chenleixing/article/details/44708533
本文由用戶 yn6e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!