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<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 {
|
// 获得收件箱
|
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;
|
}
|
}
|