EmailUtil.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package cn.kdan.utils;
  2. import cn.hutool.json.JSONObject;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.util.StringUtils;
  6. import javax.mail.*;
  7. import javax.mail.search.AndTerm;
  8. import javax.mail.search.FromStringTerm;
  9. import javax.mail.search.SearchTerm;
  10. import javax.mail.search.SubjectTerm;
  11. import java.io.IOException;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.Properties;
  15. import java.util.regex.Matcher;
  16. import java.util.regex.Pattern;
  17. /**
  18. * @author ComPDF-Bob 2024-06-11
  19. **/
  20. @Slf4j
  21. public class EmailUtil {
  22. /**
  23. * 获取邮件正文
  24. * @param part 邮件信息
  25. * @return 正文
  26. * @throws MessagingException
  27. * @throws IOException
  28. */
  29. public static String getTextFromMessage(Part part) throws MessagingException, IOException {
  30. if (part.isMimeType("text/plain")) {
  31. return (String) part.getContent();
  32. } else if (part.isMimeType("text/html")) {
  33. // 如果你想要获取 HTML 内容,可以在这里处理
  34. return (String) part.getContent();
  35. } else if (part.isMimeType("multipart/*")) {
  36. Multipart multipart = (Multipart) part.getContent();
  37. StringBuilder result = new StringBuilder();
  38. for (int i = 0; i < multipart.getCount(); i++) {
  39. BodyPart bodyPart = multipart.getBodyPart(i);
  40. String partText = getTextFromMessage(bodyPart);
  41. if (partText != null && !partText.isEmpty()) {
  42. result.append(partText);
  43. }
  44. }
  45. return result.toString();
  46. } else if (part.isMimeType("message/rfc822")) {
  47. // 如果 MIME 类型是 "message/rfc822",这意味着嵌套的邮件
  48. return getTextFromMessage((Part) part.getContent());
  49. }
  50. return "";
  51. }
  52. /**
  53. * 从邮件正文中提取目标邮箱地址
  54. *
  55. * @param body 邮件正文
  56. * @return 目标邮箱地址
  57. */
  58. public static String extractTargetEmail(String body) {
  59. Pattern pattern = Pattern.compile("([\\w.-]+@[\\w.-]+\\.[\\w]+)");
  60. Matcher matcher = pattern.matcher(body);
  61. if (matcher.find()) {
  62. return matcher.group(1);
  63. }
  64. return "";
  65. }
  66. }