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