赞
踩
<!--发送邮件依赖jar包-->
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
package com.ml.common.utils.email; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.URLDataSource; import javax.mail.*; import javax.mail.internet.*; import javax.mail.util.ByteArrayDataSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** */ public class EmailUtil { protected final Logger logger = LoggerFactory.getLogger(getClass()); /** * 邮箱格式校验 * create by: jkun * @return */ public static boolean emailFormat(String email) { boolean tag = true; if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) { tag = false; } return tag; } /** * 发送简单文本邮件 标题+内容 * @param title 标题 * @param context 内容 * @param emailAddress 邮箱地址 * @Param attachmentUrl 附件地址 * */ public static boolean sendSimpleMail(String title, String context,String emailAddress, String attachmentUrl) throws Exception { Transport transport = null; // 参数配置,勿随意更改 System.setProperty("mail.mime.splitlongparameters","false"); Properties props = new Properties(); props.put("mail.smtp.host","smtp.aliyun.com"); // 设置发送邮件的邮件服务器的属性(这里使用阿里云的smtp服务器) props.put("mail.smtp.auth", "true"); // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条) props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); Session session = Session.getDefaultInstance(props); session.setDebug(true); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("734514801@aliyun.com"/*删除此段-发件邮箱*/,"陈光照"/*发件人姓名*/,"UTF-8"));// 加载发件人地址 message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailAddress)); // 加载收件人地址 message.setSubject(title); // 加载标题 message.setSentDate(new Date()); // 设置发送时间 // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart(); BodyPart contentPart = new MimeBodyPart(); // 设置邮件的文本内容 contentPart.setText(context); // contentPart.setContent(context,"text/html;charset=utf-8"); multipart.addBodyPart(contentPart); // 添加附件 if (StringUtils.isNotBlank(attachmentUrl)){ String fileFormat = attachmentUrl.substring(attachmentUrl.lastIndexOf(".") + 1, attachmentUrl.length()); String fileName = null; if (attachmentUrl.lastIndexOf("=") != -1){ fileName = attachmentUrl.substring(attachmentUrl.lastIndexOf("=") +1, attachmentUrl.length()); } else if (attachmentUrl.lastIndexOf("/") != -1){ fileName = attachmentUrl.substring(attachmentUrl.lastIndexOf("/") +1, attachmentUrl.length()); } BodyPart messageBodyPart = new MimeBodyPart(); URLDataSource source = new URLDataSource(new URL(attachmentUrl)); // 添加附件的内容 messageBodyPart.setDataHandler(new DataHandler(source)); // 添加附件的标题 // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱 messageBodyPart.setFileName(MimeUtility.encodeText(fileName)); multipart.addBodyPart(messageBodyPart); } message.setContent(multipart); message.saveChanges(); // 保存邮件 transport = session.getTransport("smtp"); // 发送邮件 transport.connect("734514801@aliyun.com", /*阿里邮箱授权码*/"填写阿里云邮箱密码或者授权码"/*删除此段-发件人邮箱授权密码*/);// try { transport.sendMessage(message, message.getAllRecipients()); // 把邮件发送出去 } catch (Exception e){ return false; }finally { try { if (transport != null) { transport.close(); } }catch (Exception e){ e.printStackTrace(); } } return true; } public static void main(String[] args) throws Exception sendSimpleMail("测试","测试1","734514801@qq.com",null); } }
//这是html内容转字符串内容(看业务用) public class Html2TextUtil extends HTMLEditorKit.ParserCallback { private StringBuffer stringBuffer; private List<String> stringBufferList; private List<Integer> stringBufferPos; private static Html2TextUtil html2Text = new Html2TextUtil(); public Html2TextUtil() { } public void parse(String str) { InputStream iin = new ByteArrayInputStream(str.getBytes()); Reader in = new InputStreamReader(iin); stringBuffer = new StringBuffer(); stringBufferList=new ArrayList<String>(); stringBufferPos=new ArrayList<Integer>(); ParserDelegator delegator = new ParserDelegator(); try { delegator.parse(in, this, Boolean.TRUE); }catch (Exception e){ }finally { if(in !=null){ try { in.close(); }catch (Exception ee){ } } if(iin !=null){ try { iin.close(); }catch (Exception ee){ } } } } public void handleText(char[] text, int pos) { String textStr=String.valueOf(text); if(textStr!=null&&!"".equals(textStr)){ stringBufferList.add(textStr); stringBufferPos.add(pos); } stringBuffer.append(text); } public String getText() { return stringBuffer.toString(); } public Map<String,Object> getSplitText() { Map<String,Object> map=new Hashtable<String,Object>(); map.put("text",stringBuffer.toString()); map.put("textList",stringBufferList); map.put("textPos",stringBufferPos); return map; } public void flush() throws BadLocationException { } public void handleComment(char[] var1, int var2) { } public void handleStartTag(HTML.Tag var1, MutableAttributeSet var2, int var3) { } public void handleEndTag(HTML.Tag var1, int var2) { } public void handleSimpleTag(HTML.Tag var1, MutableAttributeSet var2, int var3) { } public void handleError(String var1, int var2) { } public void handleEndOfLineString(String var1) { } public static String getContent(String str) { html2Text.parse(str); return html2Text.getText(); } public static Map<String,Object> getContentMap(String str) { html2Text.parse(str); return html2Text.getSplitText(); } public static void main(String[] args){ String s1 = "<p></p><p>考生注意:</p><p style=\"text-indent: 2em;\">1.本试卷分选择题和非选择题两部分。满分100分,考试时间90分钟。</p><p style=\"text-indent: 2em;\">2.答题前,考生务必用直径0. 5毫米黑色墨水签字笔将密封线内项目填写清楚。</p>"; String result=new Html2TextUtil().getContent(s1); System.out.println("【原始html为】:"+s1); System.out.println("【纯文本字符串为】:"+result); System.out.println(); Map<String,Object> htmlMap=new Html2TextUtil().getContentMap(s1); System.out.println("【原始html】:"+s1); List<String> list= (List<String>)htmlMap.get("textList"); for(String str:list){ System.out.println(str); } } } package com.ml.common.utils.email; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator { private String strUser; private String strPwd; public MyAuthenticator(String user, String password) { this.strUser = user; this.strPwd = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(strUser, strPwd); } } package com.ml.common.utils.email; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import java.io.*; import java.util.List; import java.util.Map; import java.util.Properties; /** * @author * @describe * @date 2016/8/12 */ public class RecieveMailUtil { private MimeMessage message; private Session session; private Folder folder; private Store store; private String mailHost=""; private int mailPort; private String username=""; private String password=""; private String mail_auth = ""; private Properties properties = new Properties(); /* * 初始化方法 */ public RecieveMailUtil(String mailHost, int mailPort, String username, String password) { this.mailHost = mailHost;//比如qq邮箱pop.qq.com this.mailPort = mailPort;//995 this.username = username;//734514801@qq.com this.password = password;//qq邮箱发送授权码,需要去邮箱开启并且生成授权码 this.mail_auth = "true"; Authenticator auth = new MyAuthenticator(username, password); session = Session.getDefaultInstance(properties, auth); } /** * 收取邮件 */ public void recieveEmail() { try { // Get the store store = session.getStore("pop3"); store.connect(mailHost, username, password); /* Get folder */ folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // Get directory Message message[] = folder.getMessages(); for(int i=1;i<=folder.getMessageCount();i++){ Message msg=folder.getMessage(i); System.out.println("========================================"); System.out.println("邮件主题:" + msg.getSubject()); InternetAddress[] address = (InternetAddress[]) msg.getFrom(); String from = address[0].getAddress();//这个是发邮件人的地址 if (from == null) { from = ""; } String personal = address[0].getPersonal();//这个是发邮件的人的姓名 if (personal == null) { personal = ""; } String fromaddr = personal + "<" + from + ">"; System.out.println("邮件作者:"+fromaddr); System.out.println("发送日期:" + msg.getSentDate()); String type=msg.getContentType().toString().substring(0, msg.getContentType().toString().indexOf(";")); if(type.equals("text/html")){ //请你根据文件的类型来更改文件的解析方式 text/html multipart/alternative表示复合类型 } // boolean isContainerAttachment = isContainAttachment(msg); // System.out.println("是否包含附件:" + isContainerAttachment); // if (isContainerAttachment) { //todo 在这里处理附件 // saveAttachment(msg, "d:/mailTest/"); // } StringBuffer content = new StringBuffer(30); getMailTextContent(msg, content); System.out.println("邮件正文:" + content); // System.out.println("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- "); System.out.println("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- "); } } catch (Exception e) { e.printStackTrace(); }finally { if (folder!=null){ try { folder.close(false); } catch (MessagingException e) { e.printStackTrace(); } } if(store!=null){ try { // Close connection store.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } /** * 保存附件 * * @param part 邮件中多个组合体中的其中一个组合体 * @param destDir 附件保存目录 * @throws UnsupportedEncodingException * @throws MessagingException * @throws FileNotFoundException * @throws IOException */ public static void saveAttachment(Part part, String destDir) throws UnsupportedEncodingException, MessagingException, FileNotFoundException, IOException { if (part.isMimeType("multipart/*")) { Multipart multipart = (Multipart) part.getContent(); //复杂体邮件 //复杂体邮件包含多个邮件体 int partCount = multipart.getCount(); for (int i = 0; i < partCount; i++) { //获得复杂体邮件中其中一个邮件体 BodyPart bodyPart = multipart.getBodyPart(i); //某一个邮件体也有可能是由多个邮件体组成的复杂体 String disp = bodyPart.getDisposition(); if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) { InputStream is = bodyPart.getInputStream(); saveFile(is, destDir, decodeText(bodyPart.getFileName())); } else if (bodyPart.isMimeType("multipart/*")) { saveAttachment(bodyPart, destDir); } else { String contentType = bodyPart.getContentType(); if (contentType.indexOf("name") != -1 || contentType.indexOf("application") != -1) { saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName())); } } } } else if (part.isMimeType("message/rfc822")) { saveAttachment((Part) part.getContent(), destDir); } } /** * 读取输入流中的数据保存至指定目录 * * @param is 输入流 * @param fileName 文件名 * @param destDir 文件存储目录 * @throws FileNotFoundException * @throws IOException */ private static void saveFile(InputStream is, String destDir, String fileName) throws FileNotFoundException, IOException { BufferedInputStream bis = new BufferedInputStream(is); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(new File(destDir + fileName))); int len = -1; while ((len = bis.read()) != -1) { bos.write(len); bos.flush(); } bos.close(); bis.close(); } /** * 文本解码 * * @param encodeText 解码MimeUtility.encodeText(String text)方法编码后的文本 * @return 解码后的文本 * @throws UnsupportedEncodingException */ public static String decodeText(String encodeText) throws UnsupportedEncodingException { if (encodeText == null || "".equals(encodeText)) { return ""; } else { return MimeUtility.decodeText(encodeText); } } /** * 判断邮件中是否包含附件 * <p> * //* @param msg 邮件内容 * * @return 邮件中存在附件返回true,不存在返回false * @throws MessagingException * @throws IOException */ public static boolean isContainAttachment(Part part) throws MessagingException, IOException { boolean flag = false; if (part.isMimeType("multipart/*")) { MimeMultipart multipart = (MimeMultipart) part.getContent(); int partCount = multipart.getCount(); for (int i = 0; i < partCount; i++) { BodyPart bodyPart = multipart.getBodyPart(i); String disp = bodyPart.getDisposition(); if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) { flag = true; } else if (bodyPart.isMimeType("multipart/*")) { flag = isContainAttachment(bodyPart); } else { String contentType = bodyPart.getContentType(); if (contentType.indexOf("application") != -1) { flag = true; } if (contentType.indexOf("name") != -1) { flag = true; } } if (flag) break; } } else if (part.isMimeType("message/rfc822")) { flag = isContainAttachment((Part) part.getContent()); } return flag; } /** * 获得邮件文本内容 * * @param part 邮件体 * @param content 存储邮件文本内容的字符串 * @throws MessagingException * @throws IOException */ public static void getMailTextContent(Part part, StringBuffer content) throws MessagingException, IOException { //如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断 boolean isContainTextAttach = part.getContentType().indexOf("name") > 0; if (part.isMimeType("text/*") && !isContainTextAttach) { content.append(part.getContent().toString()); } else if (part.isMimeType("message/rfc822")) { getMailTextContent((Part) part.getContent(), content); } else if (part.isMimeType("multipart/*")) { Multipart multipart = (Multipart) part.getContent(); int partCount = multipart.getCount(); for (int i = 0; i < partCount; i++) { BodyPart bodyPart = multipart.getBodyPart(i); getMailTextContent(bodyPart, content); } } } public static void main(String[] args) { } }
有用的话就点赞加收藏吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。