腾讯企业邮箱java-收发邮件
生活随笔
收集整理的這篇文章主要介紹了
腾讯企业邮箱java-收发邮件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
騰訊企業郵箱-收郵件
package com.hzsmk.ocr.service;import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties;import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility;import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import com.hzsmk.common.util.FileResult; import com.hzsmk.common.util.OssFileUtil; import com.hzsmk.ocr.bean.co.MailInfoCo;/*** @author:Deng* @date: 2021-04-14 17:30* @remark: 騰訊郵件讀取*/ @Component public class ReadSmkQQMailUtil {@Autowiredprivate OssFileUtil ossFileUtil;@Autowiredprivate MailReadFileService mailReadFileService;//收件箱 賬戶密碼public void readEmail(String mailUser,String mailPassword) {Properties props = new Properties();props.put("mail.imap.host", "imap.exmail.qq.com");//QQ郵箱為:imap.qq.comprops.put("mail.imap.auth", "true");props.setProperty("mail.store.protocol", "imap");props.put("mail.imap.starttls.enable", "true");Session session = Session.getInstance(props);try {Store store = session.getStore();//企業郵箱如果開啟了安全登錄,密碼需要使用專用密碼,沒有開啟使用賬號密碼即可store.connect("imap.exmail.qq.com", mailUser, mailPassword);//store.connect("imap.qq.com", "xxx@xx.com", "授權碼");//QQ郵箱需要設置授權碼Folder folder = store.getFolder("Inbox");System.out.println(folder.getMessageCount());//郵箱打開方式folder.open(Folder.READ_WRITE);//收取未讀郵件Message[] messages = folder.getMessages(folder.getMessageCount() - folder.getUnreadMessageCount() + 1, folder.getMessageCount());System.out.println("郵件總數: " + folder.getMessageCount());//解析的郵件的方法,就粘貼了網上的了,有需要的直接點擊參考文檔的鏈接for (Message msg: messages) {if(parseFileMessage(folder,msg)) {//標記為已讀folder.setFlags(new Message[] {msg}, new Flags(Flags.Flag.SEEN), true);}}}catch (Exception e){System.out.println("異常: " + e);}}//private boolean parseFileMessage(Folder folder,Message message) {try {// 解析讀取到的郵件MimeMessage msg = (MimeMessage) message;System.out.println("------------------解析第" + msg.getMessageNumber() + "封郵件-------------------- ");System.out.println("主題: " + MimeUtility.decodeText(msg.getSubject()));System.out.println("發件人: " + getFrom(msg));System.out.println("收件人:" + getReceiveAddress(msg, null));System.out.println("發送時間:" + getSentDate(msg, null));System.out.println("是否已讀:" + isSeen(msg));System.out.println("郵件優先級:" + getPriority(msg));System.out.println("是否需要回執:" + isReplySign(msg));System.out.println("郵件ID:"+msg.getContentID());System.out.println("郵件ID:"+msg.getContentMD5());System.out.println("郵件大小:" + msg.getSize() * 1024 + "kb");StringBuffer content = new StringBuffer(30);getMailTextContent(msg, content);System.out.println("郵件正文:" + (content.length() > 100 ? content.substring(0,100) + "..." : content));System.out.println();MailInfoCo mailInfoco = new MailInfoCo(msg.getContentMD5(), getFrom(msg), MimeUtility.decodeText(msg.getSubject()), getSentDate(msg, null));boolean isContainerAttachment = isContainAttachment(msg);System.out.println("是否包含附件:" + isContainerAttachment);if (isContainerAttachment) {saveAttachmentFileStoage(mailInfoco,msg, msg.getFileName()); //保存附件}System.out.println("------------------第" + msg.getMessageNumber() + "封郵件解析結束-------------------- ");return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 獲得郵件發件人* @param msg 郵件內容* @return 姓名 <Email地址>* @throws MessagingException* @throws UnsupportedEncodingException*/private String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {String from = "";Address[] froms = msg.getFrom();if (froms.length < 1)throw new MessagingException("沒有發件人!");InternetAddress address = (InternetAddress) froms[0];String person = address.getPersonal();if (person != null) {person = MimeUtility.decodeText(person) + " ";} else {person = "";}from = person + "<" + address.getAddress() + ">";return from;}/*** 獲得郵件發送時間* @param msg 郵件內容* @return yyyy年mm月dd日 星期X HH:mm* @throws MessagingException*/private String getSentDate(MimeMessage msg, String pattern) throws MessagingException {Date receivedDate = msg.getSentDate();if (receivedDate == null)return "";if (pattern == null || "".equals(pattern))pattern = "yyyy年MM月dd日 E HH:mm ";return new SimpleDateFormat(pattern).format(receivedDate);}/*** 判斷郵件是否已讀* @param msg 郵件內容* @return 如果郵件已讀返回true,否則返回false* @throws MessagingException*/private boolean isSeen(MimeMessage msg) throws MessagingException {return msg.getFlags().contains(Flags.Flag.SEEN);}/*** 判斷郵件是否需要閱讀回執* @param msg 郵件內容* @return 需要回執返回true,否則返回false* @throws MessagingException*/private boolean isReplySign(MimeMessage msg) throws MessagingException {boolean replySign = false;String[] headers = msg.getHeader("Disposition-Notification-To");if (headers != null)replySign = true;return replySign;}/*** 獲得郵件的優先級* @param msg 郵件內容* @return 1(High):緊急 3:普通(Normal) 5:低(Low)* @throws MessagingException*/private String getPriority(MimeMessage msg) throws MessagingException {String priority = "普通";String[] headers = msg.getHeader("X-Priority");if (headers != null) {String headerPriority = headers[0];if (headerPriority.contains("1") || headerPriority.contains("High"))priority = "緊急";else if (headerPriority.contains("5") || headerPriority.contains("Low"))priority = "低";elsepriority = "普通";}return priority;}/*** 根據收件人類型,獲取郵件收件人、抄送和密送地址。如果收件人類型為空,則獲得所有的收件人* <p>Message.RecipientType.TO 收件人</p>* <p>Message.RecipientType.CC 抄送</p>* <p>Message.RecipientType.BCC 密送</p>* @param msg 郵件內容* @param type 收件人類型* @return 收件人1 <郵件地址1>, 收件人2 <郵件地址2>, ...* @throws MessagingException*/private String getReceiveAddress(MimeMessage msg, Message.RecipientType type) throws MessagingException {StringBuilder receiveAddress = new StringBuilder();Address[] addresss;if (type == null) {addresss = msg.getAllRecipients();} else {addresss = msg.getRecipients(type);}if (addresss == null || addresss.length < 1)throw new MessagingException("沒有收件人!");for (Address address : addresss) {InternetAddress internetAddress = (InternetAddress)address;receiveAddress.append(internetAddress.toUnicodeString()).append(",");}receiveAddress.deleteCharAt(receiveAddress.length()-1); //刪除最后一個逗號return receiveAddress.toString();}/*** 判斷郵件中是否包含附件** @return 存在附件返回true,不存在返回false*/private boolean isContainAttachment(Part part) throws Exception {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.contains("application")) {flag = true;}if (contentType.contains("name")) {flag = true;}}if (flag) break;}} else if (part.isMimeType("message/rfc822")) {flag = isContainAttachment((Part) part.getContent());}return flag;}/*** 保存文件** @param destDir 文件目錄* @param fileName 文件名* @throws Exception 異常*/private void saveAttachmentFileStoage(MailInfoCo mailInfoco,Part part,String fileName) throws Exception {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();String decodeName = decodeText(bodyPart.getFileName());decodeName = StringUtils.isEmpty(decodeName) ? fileName : decodeName;if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {// saveFile(bodyPart.getInputStream().available(), destDir, decodeName);saveMailFile(mailInfoco,bodyPart, decodeName);} else if (bodyPart.isMimeType("multipart/*")) {saveAttachmentFileStoage(mailInfoco,bodyPart,fileName);} else {String contentType = bodyPart.getContentType();if (contentType.contains("name") || contentType.contains("application")) {saveMailFile(mailInfoco,bodyPart, decodeName);//saveFile(bodyPart.getInputStream(), destDir, decodeName);}}}} else if (part.isMimeType("message/rfc822")) {saveAttachmentFileStoage(mailInfoco,(Part) part.getContent(), fileName);}}private void saveMailFile(MailInfoCo mailInfoco,BodyPart bodyPart,String fileName) throws IOException, MessagingException {//上傳到文件服務器FileResult filere = ossFileUtil.uploadFile(getFileBuffer(bodyPart.getInputStream()), fileName);//保存到數據庫里面mailReadFileService.saveMailFile(mailInfoco, filere,fileName);}/*** 獲取文件字節** @param file* @return*/private byte[] getFileBuffer(InputStream in) {byte[] fileByte = null;try {fileByte = new byte[in.available()];in.read(fileByte);} catch (IOException e) {}return fileByte;}/*** 獲得郵件文本內容* @param part 郵件體* @param content 存儲郵件文本內容的字符串* @throws MessagingException* @throws IOException*/private 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);}}}/*** 文本解碼*/private String decodeText(String encodeText) throws Exception {if (encodeText == null || "".equals(encodeText)) {return "";} else {return MimeUtility.decodeText(encodeText);}}}騰訊企業郵箱-發送郵件
package com.hzsmk.ocr.service;import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.*; import javax.mail.internet.*; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.util.Date; import java.util.Properties;public class MailUtils {//郵件賬戶private static final String FROM_MAIL ="yu111111";//郵箱密碼private static final String MAIL_PASSWPRD ="Sm111111";public static void sendEmail(String toMail, String subject, String messages){Properties prop = new Properties();//協議prop.setProperty("mail.transport.protocol", "smtp");//服務器prop.setProperty("mail.smtp.host", "smtp.exmail.qq.com");prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 就可了// prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//prop.setProperty("mail.smtp.socketFactory.port", "465");//端口prop.setProperty("mail.smtp.port", "465");//使用smtp身份驗證prop.setProperty("mail.smtp.auth", "true");//使用SSL,企業郵箱必需!//開啟安全協議MailSSLSocketFactory sf = null;try {sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);} catch (GeneralSecurityException e1) {e1.printStackTrace();}prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);////獲取Session對象Session s = Session.getDefaultInstance(prop,new Authenticator() {//此訪求返回用戶和密碼的對象@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//郵箱賬號,密碼PasswordAuthentication pa = new PasswordAuthentication(FROM_MAIL, MAIL_PASSWPRD);return pa;}});//設置session的調試模式,發布時取消s.setDebug(true);MimeMessage mimeMessage = new MimeMessage(s);try {//發件人郵箱,顯示的發件人(可以是任何內容)mimeMessage.setFrom(new InternetAddress(FROM_MAIL,"羅陽-發件人別名"));//收件人mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toMail));//設置主題mimeMessage.setSubject(subject);mimeMessage.setSentDate(new Date());//設置內容mimeMessage.setText(messages);mimeMessage.saveChanges();//發送Transport.send(mimeMessage);} catch (MessagingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e){e.getCause();}}public static void main(String[] args) {sendEmail("lu1121231231231235.com", "郵件標題啊---", "郵件內容 啊啊啊 ");} }總結
以上是生活随笔為你收集整理的腾讯企业邮箱java-收发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言把一个文件中的内容复制到另外一个文
- 下一篇: [1600]卡斯丁狗要吃糖葫芦