diff --git a/ruoyi-flyingbook/pom.xml b/ruoyi-flyingbook/pom.xml index 26b17c9..b6d07e9 100644 --- a/ruoyi-flyingbook/pom.xml +++ b/ruoyi-flyingbook/pom.xml @@ -57,7 +57,11 @@ - + + com.sun.mail + javax.mail + 1.5.5 + diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java new file mode 100644 index 0000000..9c54058 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java @@ -0,0 +1,107 @@ +package com.ruoyi.flyingbook.mail; + +import com.ruoyi.flyingbook.mail.request.MailRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.mail.*; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeUtility; +import javax.mail.search.*; +import java.security.Security; +import java.util.Properties; + +/** + * @author yuxiangyong + * @create 2023-04-09 15:28 + */ +@Slf4j +@Component +public class MailHelper { + + /** + * ssl加密 + */ + private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; + + public static void main(String[] args) { + MailHelper mailHelper = new MailHelper(); + MailRequest req = new MailRequest("imap.qq.com",993,"932687738","ohziejkxqvsgbbag"); + mailHelper.receiveMail(req); + } + + public void receiveMail(MailRequest req){ + Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); + // 定义连接imap服务器的属性信息 + String portStr = String.valueOf(req.getEmailPort()); + Properties props = new Properties(); + props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY); + props.setProperty("mail.imap.socketFactory.fallback", "false"); + props.setProperty("mail.transport.protocol", req.getEmailProtocol()); + props.setProperty("mail.imap.port", portStr); + props.setProperty("mail.imap.socketFactory.port", portStr); + + //创建会话 + Session session = Session.getInstance(props, new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(req.getUserName(),req.getAuthorizationCode()); + } + }); + Store store = null; + Folder folder = null; + try { + //存储对象 + store = session.getStore(req.getEmailProtocol()); + //连接 + store.connect(req.getEmailServer(),req.getEmailPort(),req.getUserName(),req.getAuthorizationCode()); + // 获得收件箱 + folder = store.getFolder(req.getReceiveFolder()); + // 以读写模式打开收件箱 + folder.open(Folder.READ_WRITE); + //false 表示未读 + FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),false); + //获得收件箱的邮件列表 + Message[] messages = folder.search(flagTerm); + // 打印不同状态的邮件数量 + log.info("收件箱中共{}封邮件!\n共{}封未读邮件!\n共{}封新邮件!\n共{}封已删除邮件!", + messages.length, + folder.getUnreadMessageCount(), + folder.getNewMessageCount(), + folder.getDeletedMessageCount()); + log.info("------------------------开始解析邮件----------------------------------"); + for (int i = 0; i < messages.length; i++) { + Message message = messages[i]; + parseMsg(message); + //设置已读 + message.setFlag(Flags.Flag.SEEN,true); + } + } catch (Exception e) { + log.error("邮件解析失败",e); + } finally { + try { + if (folder != null) { + folder.close(false); + } + if (store != null) { + store.close(); + } + } catch (MessagingException e) { + log.error("邮件解析失败",e); + } + } + } + + private void parseMsg(Message message){ + try { + System.out.println("消息:"+ message.getSubject()); + String from = MimeUtility.decodeText(message.getFrom()[0].toString()); + InternetAddress internetAddress = new InternetAddress(from); + System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')'); + + }catch (Exception e){ + + } + + } +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java new file mode 100644 index 0000000..6af378c --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java @@ -0,0 +1,72 @@ +package com.ruoyi.flyingbook.mail.request; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author yuxiangyong + * @create 2023-04-09 16:41 + */ +@Data +@NoArgsConstructor +public class MailRequest { + + + /** + * 邮件服务器地址 + * imap.qq.com + */ + private String emailServer; + /** + * 邮件服务器端口 + * 993 + */ + private Integer emailPort; + /** + * 邮件协议 + * imap + */ + private String emailProtocol; + /** + * 登录用户名 + */ + private String userName; + /** + * 开通协议的时候的授权码 + */ + private String authorizationCode; + /** + * 收件箱目录 + * INBOX + */ + private String receiveFolder; + /** + * 是否需要反馈已读信息 + */ + private Boolean readFeedback; + + private void fillDefault(Boolean readFeedback){ + this.emailProtocol = "imap"; + this.receiveFolder = "INBOX"; + if (readFeedback != null){ + this.readFeedback = readFeedback; + } + } + + public MailRequest(String emailServer, Integer emailPort, String userName, String authorizationCode, Boolean readFeedback) { + this.emailServer = emailServer; + this.emailPort = emailPort; + this.userName = userName; + this.authorizationCode = authorizationCode; + this.readFeedback = readFeedback; + this.fillDefault(readFeedback); + } + + public MailRequest(String emailServer, Integer emailPort, String userName, String authorizationCode) { + this.emailServer = emailServer; + this.emailPort = emailPort; + this.userName = userName; + this.authorizationCode = authorizationCode; + this.fillDefault(Boolean.TRUE); + } +}