linwe
2024-08-09 8b7258c9427882bb1798f1502eaa35184c6e374e
src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
@@ -1,10 +1,19 @@
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;
@@ -12,12 +21,26 @@
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;
@Service
@Slf4j
public class EmailAccountServiceImpl implements IEmailAccountService {
   private static Logger logger = LoggerFactory.getLogger(EmailAccountServiceImpl.class);
   @Autowired
   MailSenderConfig senderConfig;
@@ -26,30 +49,129 @@
   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 void senderEmail(EmailAccount account) {
      log.info(Thread.currentThread().getName());
      JavaMailSenderImpl javaMailSender = senderConfig.getSender();
      //一个复杂的邮件
      MimeMessage message = javaMailSender.createMimeMessage();
   public Boolean sendMessageUserEmail(String title, String content, List<MessageUser> messageUserList) {
      List<String> 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<MessageRecordVO> getUnreadList() throws MessagingException {
      Folder folder = null;
      Store store = senderConfig.getReceive();
      List<MessageRecordVO> MessageRecordVOList = new ArrayList<>();
      try {
         //组装
         MimeMessageHelper helper = new MimeMessageHelper(message, true);
         // 获得收件箱
         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() + "封已删除邮件!");
         //主题(标题)
         helper.setSubject(account.getSubject());
         System.out.println("------------------------开始解析邮件----------------------------------");
//         ParseMail.getMailTextContent(messages.)
         StringBuffer content = new StringBuffer(30);
         helper.setText(account.getContent(),true);
//         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) {
         helper.setTo(account.getEmails().toArray(new String[account.getEmails().size()]));
            ParseMail.getMailTextContent(message, content);
         helper.setFrom(javaMailSender.getUsername());
            MessageRecordVO messageRecordVO = new MessageRecordVO();
            String from = MimeUtility.decodeText(message.getFrom()[0].toString());
            InternetAddress ia = new InternetAddress(from);
         javaMailSender.send(message);
            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;
   }
}