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.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import javax.annotation.Resource; 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; @Service @Slf4j public class EmailAccountServiceImpl implements IEmailAccountService { private static Logger logger = LoggerFactory.getLogger(EmailAccountServiceImpl.class); @Autowired MailSenderConfig senderConfig; @Autowired MailProperties mailProperties; @Override public Boolean senderEmail(EmailAccount account) { if (account.getEmails().size() > 0) { log.info(Thread.currentThread().getName()); JavaMailSenderImpl javaMailSender = senderConfig.getSender(); //一个复杂的邮件 MimeMessage message = javaMailSender.createMimeMessage(); try { //组装 MimeMessageHelper helper = new MimeMessageHelper(message, true); //主题(标题) helper.setSubject(account.getSubject()); helper.setText(account.getContent(), true); helper.setTo(account.getEmails().toArray(new String[account.getEmails().size()])); helper.setFrom(javaMailSender.getUsername()); javaMailSender.send(message); return true; } catch (MessagingException e) { logger.error("邮件发送失败!", e); return false; } } return false; } @Override public Boolean sendMessageUserEmail(String title, String content, List messageUserList) { List emails = messageUserList.stream().filter(e -> StringUtil.isNotBlank(e.getEmail())).map(MessageUser::getEmail).collect(Collectors.toList()); EmailAccount emailAccount = new EmailAccount(); emailAccount.setEmails(emails); emailAccount.setSubject(title); emailAccount.setContent(content); return senderEmail(emailAccount); } @Override public List getUnreadList() throws MessagingException { Folder folder = null; Store store = senderConfig.getReceive(); List 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; } }