| | |
| | | package org.springblade.modules.email.service.impl; |
| | | |
| | | import com.sun.mail.imap.IMAPFolder; |
| | | import com.sun.mail.imap.IMAPStore; |
| | | import com.xxl.job.core.util.DateUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springblade.common.utils.ParseMail; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springblade.modules.email.config.MailProperties; |
| | | import org.springblade.modules.email.config.MailSenderConfig; |
| | | import org.springblade.modules.email.entity.EmailAccount; |
| | | import org.springblade.modules.email.service.IEmailAccountService; |
| | | import org.springblade.modules.messageRecord.entity.MessageUser; |
| | | import org.springblade.modules.messageRecord.vo.MessageRecordVO; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.mail.javamail.JavaMailSender; |
| | | import org.springframework.mail.javamail.JavaMailSenderImpl; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.mail.MessagingException; |
| | | import javax.mail.*; |
| | | import javax.mail.internet.InternetAddress; |
| | | import javax.mail.internet.MimeMessage; |
| | | import javax.mail.internet.MimeUtility; |
| | | import javax.mail.search.FlagTerm; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | emailAccount.setSubject(title); |
| | | emailAccount.setContent(content); |
| | | |
| | | return senderEmail(emailAccount); |
| | | return senderEmail(emailAccount); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<MessageRecordVO> getUnreadList() throws MessagingException { |
| | | Folder folder = null; |
| | | Store store = senderConfig.getReceive(); |
| | | List<MessageRecordVO> MessageRecordVOList = new ArrayList<>(); |
| | | try { |
| | | // 获得收件箱 |
| | | folder = store.getFolder("INBOX"); |
| | | // 以读写模式打开收件箱 |
| | | folder.open(Folder.READ_WRITE); |
| | | //false 表示未读 |
| | | FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false); |
| | | //获得收件箱的邮件列表 |
| | | Message[] messages = folder.search(flagTerm); |
| | | // 打印不同状态的邮件数量 |
| | | System.out.println("收件箱中共" + messages.length + "封邮件!"); |
| | | System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!"); |
| | | System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!"); |
| | | System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!"); |
| | | |
| | | System.out.println("------------------------开始解析邮件----------------------------------"); |
| | | // ParseMail.getMailTextContent(messages.) |
| | | StringBuffer content = new StringBuffer(30); |
| | | |
| | | // for (int i = 0; i < messages.length; i++) { |
| | | // System.out.println("消息:"+messages[i].getSubject()); |
| | | // String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString()); |
| | | // InternetAddress internetAddress = new InternetAddress(from); |
| | | // System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')'); |
| | | // } |
| | | for (Message message : messages) { |
| | | |
| | | ParseMail.getMailTextContent(message, content); |
| | | |
| | | MessageRecordVO messageRecordVO = new MessageRecordVO(); |
| | | String from = MimeUtility.decodeText(message.getFrom()[0].toString()); |
| | | InternetAddress ia = new InternetAddress(from); |
| | | |
| | | System.out.println("发件人:" + ia.getPersonal() + '(' + ia.getAddress() + ')'); |
| | | System.out.println("主题:" + message.getSubject()); |
| | | System.out.println("主题fa:" + message.getFlags()); |
| | | if (message.getSentDate() != null) { |
| | | System.out.println("邮件发送时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate())); |
| | | } |
| | | System.out.println("-------------------------------------------\n"); |
| | | // message.setFlag(Flags.Flag.SEEN, true); |
| | | messageRecordVO.setTitle(message.getSubject()); |
| | | if (message.getSentDate() != null) { |
| | | messageRecordVO.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate())); |
| | | } |
| | | messageRecordVO.setUserName(ia.getPersonal() + '(' + ia.getAddress() + ')'); |
| | | messageRecordVO.setContent(String.valueOf(content)); |
| | | MessageRecordVOList.add(messageRecordVO); |
| | | } |
| | | return MessageRecordVOList; |
| | | |
| | | } catch (NoSuchProviderException e) { |
| | | e.printStackTrace(); |
| | | } catch (MessagingException e) { |
| | | e.printStackTrace(); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (folder != null) { |
| | | folder.close(false); |
| | | } |
| | | if (store != null) { |
| | | store.close(); |
| | | } |
| | | } catch (MessagingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |