gpt4 book ai didi

java - 获取字符串形式的 MimeMessage 内容

转载 作者:行者123 更新时间:2023-12-02 01:15:07 28 4
gpt4 key购买 nike

我一直在寻找和尝试这个,所以我需要你的帮助。我有一个接收 HTML 电子邮件的服务器。之后,我想获取它的各个部分(标题、主题和正文部分)。获取标题和主题没有问题,但内容却有问题。

这是我获取 SmtpMessage 的代码:

private SmsItem getEmailData(SmtpMessage msg) throws MessagingException, IOException {
String to = msg.getHeaderValue("To");
String from = msg.getHeaderValue("From");
String content = null;
LOG.info("Mail from: " + from + " to: " + to);

String toNr;
Pattern mobileNr = Pattern.compile("(\\+?[0-9]+)@*");
Matcher matcher = mobileNr.matcher(to);
if (matcher.find()) {
toNr = Utils.processAddress(matcher.group(1));
} else {
throw new RuntimeException("Illegal address to send SMS from mail: " + to);
}

Pattern fromMail = Pattern.compile("\\<+([a-zA-Z0-9@.-]*)\\>+");
matcher = fromMail.matcher(from);
if(matcher.find()){
from = matcher.group(1);
LOG.info(from);
}else{
throw new RuntimeException("Ilegal From Address: " + from);
}

现在我正在获取内容本身:

Session s = Session.getDefaultInstance(new Properties());
String ip = msg.toString();
ip = MimeUtility.decodeText(ip);
InputStream is = new ByteArrayInputStream(ip.getBytes("ISO-8859-1"));
MimeMessage mi = new MimeMessage(s, is);

Object message = mi.getContent();
String test = mi.getContent().toString();
test.toString();

现在我有一个如下所示的字符串:javax.mail.internet.MimeMultipart@4edfc9bb

但是当我这样写出来时:

((Multipart) message).writeTo(System.out);

我在可以看到我想要的内容的地方得到了这个:

This is a multi-part message in MIME format.--------------010600010509000401060604Content-Type: text/plain; charset=utf-8; format=flowedContent-Transfer-Encoding: 7bit
*asdasd ad asd asddfgdfgsdfsd:-)*
asdsad
javax.mail.MessagingException: Empty multipart: multipart/alternative;
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:548)
at ...

但它不能为空吧?我正在尝试获取这样的内容:

if (message instanceof String)
{
message = (String)message;
LOG.info("String");
}
else if (message instanceof Multipart)
{
Multipart mp = (Multipart)message;
LOG.info("Count: " + mp.getCount() + mp.getParent() + test.toString());
for (int i = 0; i < mp.getCount(); i++){
LOG.info("Multipart");
LOG.info(i + ". " + mp.getBodyPart(i).toString());
BodyPart bp = mp.getBodyPart(i);
String dp = bp.getDisposition();

if(dp != null){
LOG.error("Something's wrong");
}else if(dp.equalsIgnoreCase("ATTACHMENT")){
LOG.error("Attachment dürfen nicht mitgegeben werden!");
}else{
content = bp.getContent().toString();
}
}
}

我真的需要完成这件事,并且我在互联网上搜索了很长时间..

最佳答案

使用commons-email可以获取如下内容

MimeMessageParser parser = new MimeMessageParser(yourMimeMessage);
parser.parse();

String htmlContent = parser.getHtmlContent();
// or
String plainContent = parser.getPlainContent();

关于java - 获取字符串形式的 MimeMessage 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781094/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com