parent
1d622b6ed3
commit
4cc9e6d1af
@ -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){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue