1.准備工作
1)下載mail-1.4.jar
2) 下載activation-1.1.jar
如果是maven項目,引入依賴:
<!-- https://mvnrepository.com/artifact/javax.mail/mail --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.activation/activation --> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
2.工具類MailUtil.java

package com.syy.community._gaowenbin.util; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * * 郵件發送的工具類 * @author HUAWEI * */ public class MailUtil { /** * 創建簡單的文本郵件 * @param session * @param mailfrom 郵件發送方地址 eg.xx@qq.com * @param mailTo 郵件接收方地址,eg.xx@qq.com * @param mailTittle 郵件標題 * @param mailText 郵件文本主體 * @return * @throws Exception */ public static MimeMessage createSimpleMail(Session session, String mailfrom, String mailTo, String mailTittle, String mailText) throws Exception { // 創建郵件對象 MimeMessage message = new MimeMessage(session); // 指明郵件的發件人 message.setFrom(new InternetAddress(mailfrom)); // 指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發 message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo)); // 郵件的標題 message.setSubject(mailTittle); // 郵件的文本內容 message.setContent(mailText, "text/html;charset=UTF-8"); // 返回創建好的郵件對象 return message; } /** * 創建圖文郵件 * @param session * @param mailMap 郵件的所有內容的包裝 * @param hasfujian 若為true,mailMap中必須包含相應的信息 * @return * @throws MessagingException */ public static MimeMessage imageMail(Session session,Map<String,Object> mailMap,boolean hasfujian) throws MessagingException { //消息的固定信息 MimeMessage mimeMessage = new MimeMessage(session); //郵件發送人 mimeMessage.setFrom(new InternetAddress(mailMap.get("from").toString())); //郵件接收人,可以同時發送給很多人 mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(mailMap.get("to").toString())); mimeMessage.setSubject(mailMap.get("title").toString()); //郵件主題 //圖片 MimeBodyPart body1 = new MimeBodyPart(); body1.setDataHandler(new DataHandler(new FileDataSource(mailMap.get("datasrc").toString()))); body1.setContentID(mailMap.get("contentid").toString()); //圖片設置ID //文本 MimeBodyPart body2 = new MimeBodyPart(); body2.setContent(mailMap.get("content"),"text/html;charset=utf-8"); if(hasfujian){ List<Map<String,String>> listmap = (List<Map<String, String>>) mailMap.get("fujian"); List<MimeBodyPart> fjlist = new ArrayList<MimeBodyPart>(); for(Map<String, String> item:listmap){ //附件 MimeBodyPart body = new MimeBodyPart(); body.setDataHandler(new DataHandler(new FileDataSource(item.get("filesrc").toString()))); body.setFileName(item.get("filename")); //附件設置名字 fjlist.add(body); //拼裝郵件正文內容 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(body1); multipart1.addBodyPart(body2); multipart1.setSubType("related"); //文本和圖片內嵌成功! //new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內容設置為主體 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(multipart1); //拼接附件 MimeMultipart allFile =new MimeMultipart(); for(MimeBodyPart mbp:fjlist){ allFile.addBodyPart(mbp); //附件 } allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類型設置為mixed; //放到Message消息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//保存修改 } }else{ //拼裝郵件正文內容 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(body1); multipart1.addBodyPart(body2); multipart1.setSubType("related"); //1.txt.文本和圖片內嵌成功! //new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內容設置為主體 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(multipart1); //拼接附件 MimeMultipart allFile =new MimeMultipart(); allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類型設置為mixed; //放到Message消息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//保存修改 } return mimeMessage; } /** * 發送郵件方法封裝 * @param contentMap 郵件配置的map * @param imgmial 是否為帶圖郵件 * @param hasfujian 是否有附件 * @throws Exception */ public static void sendMail(final Map<String, Object> contentMap,boolean imgmial,boolean hasfujian) throws Exception{ Properties prop = new Properties(); //設置QQ郵件服務器 prop.setProperty("mail.host", contentMap.get("host").toString()); //郵件發送協議 prop.setProperty("mail.transport.protocol", "smtp"); //需要驗證用戶名密碼 prop.setProperty("mail.smtp.auth", "true"); //關於QQ郵箱,還要設置SSL加密,加上以下代碼即可 //MailSSLSocketFactory sf = new MailSSLSocketFactory(); //sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); // prop.put("mail.smtp.ssl.socketFactory", sf); //使用JavaMail發送郵件的5個步驟 //1.txt、創建定義整個應用程序所需的環境信息的Session對象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //發件人郵件用戶名、授權碼 return new PasswordAuthentication(contentMap.get("from").toString(), contentMap.get("password").toString()); } }); //可以通過session開啟Dubug模式,查看所有的過程 session.setDebug(true); //2.獲取連接對象,通過session對象獲得Transport,需要捕獲或者拋出異常; Transport tp = session.getTransport(); //3.連接服務器,需要拋出異常; tp.connect(contentMap.get("host").toString(),contentMap.get("from").toString(),contentMap.get("password").toString()); MimeMessage mimeMessage = null; //4.連接上之后我們需要發送郵件; if(imgmial){ mimeMessage = imageMail(session,contentMap,hasfujian); }else{ mimeMessage = createSimpleMail(session, contentMap.get("from").toString(), contentMap.get("to").toString(), contentMap.get("title").toString(), contentMap.get("content").toString()); } //5.發送郵件 tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //6.關閉連接 tp.close(); } }
3.調用test.java

public static Map<String,Object> getMailMap(JSONObject jsondata){ //發送方信息配置 Map<String,Object> map = new HashMap<String, Object>(); map.put("host",jsondata.getString("host")); map.put("from",jsondata.getString("from")); map.put("password",jsondata.getString("password")); //發送內容配置 map.put("datasrc","src/resource/fujian/dh.jpg"); map.put("contentid","dh.jpg"); map.put("content","請注意,我不是廣告<img src='cid:dh.jpg'>"); map.put("to","xxx@qq.com"); map.put("title","just a jok"); //附件部分 Map<String,String> mapfj = new HashMap<String, String>(); mapfj.put("filesrc","src/resource/fujian/spring.xml"); mapfj.put("filename","spring.xml"); Map<String,String> mapfj1 = new HashMap<String, String>(); mapfj1.put("filesrc","src/resource/fujian/1.txt"); mapfj1.put("filename","1.txt"); List<Map<String,String>> list = new ArrayList<Map<String,String>>(); list.add(mapfj); list.add(mapfj1); map.put("fujian", list); return map; } public static void main(String[] args) throws Exception { Map<String,Object> map = getMailMap(ConfigCenter.getMailSenderInfo()); MailUtil.sendMail(map, true, true); }
4.發送方配置類ConfigCenter.java

package com.syy.community._gaowenbin.config; import net.sf.json.JSONObject; /** * * 配置中心 * getMailSenderInfo 方法為email外發提供發送方配置 * @author HUAWEI * */ public class ConfigCenter { private static String from = "xxx@163.com"; private static String pass = "xxx"; private static String host = "smtp.163.com"; public static JSONObject getMailSenderInfo(){ JSONObject obj = new JSONObject(); obj.accumulate("from",from ); obj.accumulate("password",pass ); obj.accumulate("host",host ); return obj; } }