This commit is contained in:
18792927508
2023-12-20 09:15:28 +08:00
parent 547394f8d6
commit 20c95700ab
25 changed files with 1277 additions and 800 deletions
@@ -1,6 +1,8 @@
package com.ruoyi.common.utils;
import com.ruoyi.common.utils.uuid.UUID;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -14,18 +16,17 @@ import org.springframework.stereotype.Component;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
import javax.mail.util.ByteArrayDataSource;
import javax.validation.constraints.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.Security;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
/**
* @ClassName EmailInUtil
@@ -48,10 +49,12 @@ public class EmailOutUtil {
// private static String fromOut;
@Value("${spring.mail.host}")
private String hostOut;
@Value("${spring.mail.username}")
private String usernameOut;
@Value("${spring.mail.password}")
private String passwordOut;
// @Value("${spring.mail.username}")
// private String usernameOut;
private String usernameOut="wq18792927508@163.com";
// @Value("${spring.mail.password}")
// private String passwordOut;
private String passwordOut= "WDFHKSEMCKVRELEA";
@Value("${spring.mail.port}")
private Integer portOut;
@@ -98,6 +101,7 @@ public class EmailOutUtil {
String messageContent = "<html><body><p style=\"font-family: Arial, sans-serif; font-size: 18px;\">"+message+"。</p></body></html>";
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(messageContent, "text/html;charset=utf-8");
messageBodyPart.setContentID(UUID.randomUUID().toString());
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
//设置邮件会话参数
@@ -269,4 +273,164 @@ public class EmailOutUtil {
}
return flag;
}
public void buildReceiveConnect() throws Exception {
//POP3主机名
String host = "pop3.163.com";
//设置传输协议
String protocol = "pop3";
//用户账号
String username = "wq18792927508@163.com";
//密码或者授权码
String password = "WDFHKSEMCKVRELEA";
/*
* 获取Session
*/
Properties props = new Properties();
//协议
props.setProperty("mail.store.protocol", protocol);
//POP3主机名
props.setProperty("mail.pop3.host", host);
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.pop3.default-encoding", "UTF-8");
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(usernameOut, passwordOut);
}
});
URLName urlName = new URLName(protocol, host, 110, null, username, password);
Store store = session.getStore(urlName);
store.connect(username, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
}
/**
* 接收邮件
*/
public List<String> receiverMail() {
List<String> messageIds=new ArrayList<>();
// session.setDebug(true);
try {
//POP3主机名
String host = "pop3.163.com";
//设置传输协议
String protocol = "pop3";
//用户账号
String username = "wq18792927508@163.com";
//密码或者授权码
String password = "WDFHKSEMCKVRELEA";
/*
* 获取Session
*/
Properties props = new Properties();
//协议
props.setProperty("mail.store.protocol", protocol);
//POP3主机名
props.setProperty("mail.pop3.host", host);
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.pop3.default-encoding", "UTF-8");
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(usernameOut, passwordOut);
}
});
URLName urlName = new URLName(protocol, host, 110, null, username, password);
Store store = session.getStore(urlName);
store.connect(username, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
SearchTerm orTerm = new SubjectTerm("退信");
// Message[] messages = folder.search(orTerm);
Date endTime= new Date();
long oneDayMillis=24*60*60*1000L;
Date startTime=new Date(endTime.getTime()-oneDayMillis);
// SearchTerm comparisonTermGe = new SentDateTerm(ComparisonTerm.GE, startTime);
// SearchTerm comparisonTermLe = new SentDateTerm(ComparisonTerm.LE, endTime);
// SearchTerm comparisonAndTerm = new AndTerm(comparisonTermGe, comparisonTermLe);
// SearchTerm searchTerm = new AndTerm(comparisonAndTerm, orTerm);
Message[] messages = folder.search(orTerm);
if (messages != null) {
Arrays.stream(messages).forEach(message -> {
String messageId="";
try {
messageId = EmailUtil.getMessageId(message,session);
} catch (Exception e) {
e.printStackTrace();
}
messageIds.add(messageId);
});
}
folder.close(false);
store.close();
} catch (Exception e) {
return messageIds;
}
return messageIds;
}
public void analyseMail(Session session, Object content) throws Exception {
if (content instanceof Multipart) {
Multipart multipart = (Multipart) content;
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
// if (bodyPart.isMimeType("message/rfc822")) { if(bodyPart.getContentType().startsWith("Message/Rfc822"));
// MimeMessage mimeMessage = new MimeMessage(session, bodyPart.getInputStream());
// }
if(bodyPart.isMimeType("Message/Rfc822")){
MimeMessage mimeMessage = new MimeMessage(session, bodyPart.getInputStream());
}
}
}
}
public static String getMessageId(Part part) throws Exception {
if (!part.isMimeType("multipart/*")) {
return "";
}
Multipart multipart = (Multipart) part.getContent();
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
if (part.isMimeType("message/rfc822")) {
return getMessageId((Part) part.getContent());
}
InputStream inputStream = bodyPart.getInputStream();
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
String strLine;
while ((strLine = br.readLine()) != null) {
if (strLine.startsWith("Message_Id:")) {
String[] split = strLine.split("Message_Id:");
return split.length > 1 ? split[1].trim() : null;
}
}
}
}
return "";
}
//检查退信邮件
// Folder folder = ...; //打开收件箱
// Message[] messages = folder.getMessages();
// for (Message message : messages) {
// if (message.getSubject().contains("Delivery Status Notification")) {
// System.out.println("Delivery failed for recipient: " + message.getRecipients()[0]);
// }
// }
}