Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以字符串形式获取MimeMessage内容_Java_Email_Smtp_Multipart_Mime Message - Fatal编程技术网

Java 以字符串形式获取MimeMessage内容

Java 以字符串形式获取MimeMessage内容,java,email,smtp,multipart,mime-message,Java,Email,Smtp,Multipart,Mime Message,我已经搜索和尝试了这么久,我需要你的帮助。 我有一个服务器,可以接收HTML电子邮件。在那之后,我想得到它的部分(标题、主题和主体部分)。 获取标题和主题是没有问题的,但是内容是有问题的 下面是我收到SmtpMessage的代码: private SmsItem getEmailData(SmtpMessage msg) throws MessagingException, IOException { String to = msg.getHeaderValue("To");

我已经搜索和尝试了这么久,我需要你的帮助。 我有一个服务器,可以接收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);
        }
现在我有一个字符串,看起来像这样: 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();
                }
            }
        }
if(字符串的消息实例)
{
消息=(字符串)消息;
LOG.info(“字符串”);
}
else if(多部分的消息实例)
{   
多部分mp=(多部分)消息;
LOG.info(“Count:+mp.getCount()+mp.getParent()+test.toString());
对于(int i=0;i
我真的需要完成这项工作,我在互联网上搜索了很长时间。

使用你可以得到如下内容

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

String htmlContent = parser.getHtmlContent();
// or
String plainContent = parser.getPlainContent();
您可以使用(开源)将MIMessage转换为电子邮件对象,然后访问所有内容,包括附件和嵌入的图像、收件人、html、文本和标题:

Email email = EmailConverter.mimeMessageToEmail(mimeMessage);
从这里,您可以轻松访问电子邮件中的所有项目


那是个好主意,谢谢。但最好是用我拥有的东西来做,我没有用gradle将commons电子邮件添加到我的android项目中的方法。我将此添加到我的项目中:compile“commons io:commons io:+”@DineshVG将来自Apache commons的commons电子邮件添加到您的依赖项中。请看:您好@Daniel,谢谢您,但是在与WSO2一起使用时,我面临定义解析器类的问题。消息写入(系统输出);这解决了我的问题
Email email = EmailConverter.mimeMessageToEmail(mimeMessage);