读取邮箱信息

于相涌/mail
YXY 1 year ago
parent 1d622b6ed3
commit 4cc9e6d1af

@ -57,7 +57,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.5</version>
</dependency>
</dependencies>

@ -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…
Cancel
Save