Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 当访问message/rfc822附件的内部主题时,我们得到Null_Java_Jakarta Mail_Mime Message - Fatal编程技术网

Java 当访问message/rfc822附件的内部主题时,我们得到Null

Java 当访问message/rfc822附件的内部主题时,我们得到Null,java,jakarta-mail,mime-message,Java,Jakarta Mail,Mime Message,在上图中,我们提到了输入文件,它以eml的形式提供输入 MimeMessageParser mmparser = new MimeMessageParser(message); mmparser.parse(); System.out.println("Subject1: " + mmparser.getSubject()); List<DataSource> attachmentList = mmparser.getAttachmentLis

在上图中,我们提到了输入文件,它以eml的形式提供输入

 MimeMessageParser mmparser = new MimeMessageParser(message);        
mmparser.parse();    
System.out.println("Subject1: " + mmparser.getSubject());       
List<DataSource> attachmentList = mmparser.getAttachmentList();     
System.out.println("Number of attachment " + attachmentList.size());     
DataSource ds1 = mmparser.getAttachmentList().get(0);           
System.out.println("Content Type:" + ds1.getContentType());       
final Session mail_session = Session.getDefaultInstance(new java.util.Properties());                           
final MimeMessage mimeMsgAtt = new MimeMessage(mail_session, ds1.getInputStream());
MimeMessageParser mmparserAttachment = new MimeMessageParser(mimeMsgAtt);      
MimeMessageParser mmparser1 = new MimeMessageParser(mmparserAttachment.getMimeMessage());                             
mmparser1.parse();                                 
System.out.println("Subject2: " + mmparser1.getSubject());     
List<DataSource> attachNum = mmparser1.getAttachmentList();       
System.out.println("Number of attachment:" +attachNum.size());       
DataSource dsX2 = mmparser1.getAttachmentList().get(0);       
final MimeMessage mimeMsgAttX1 = new MimeMessage(mail_session, dsX2.getInputStream());        
MimeMessageParser mmparserAttachmentX2 = new MimeMessageParser(mimeMsgAttX1);     
MimeMessageParser mmparser2 = new MimeMessageParser(mmparserAttachmentX2.getMimeMessage());                                
mmparser2.parse();       
// THE PROBLEM, subject is null      
System.out.println("Subject3: " + mmparser2.getSubject());     


> output

 :Subject1: Undeliverable: GEET - Downtime Notification for E411   
Number of attachment 1      
Content Type: message/rfc822     
Subject2: Undeliverable: GEET - Downtime Notification for E411     
Number of attachment: 2      
Subject3: null     

这里我们无法访问第三个主题,即GEET-E411的停机通知。我无法找到我的错误所在,请帮助我。

根据您添加的数据,问题可能是邮件格式不正确。所附邮件具有以下标题:

Content-Type: text/html; charset="'us-ascii'"
字符集值被引用两次,这导致在查找字符集转换器解码内容时失败。您可能可以使用

我对MIMessageParser一无所知,但即使忽略上面JavaMail的字符集问题,也可以使用类和示例程序正确解析消息:

$ java msgshow -m -s < DemoEmail.eml
This is the message envelope
---------------------------
FROM: Microsoft Outlook <MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@pocmchase.com>
REPLY TO: Microsoft Outlook <MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@pocmchase.com>
TO: rasem017@eddbas-pyr20v.svr.emea.pocmchase.net
SUBJECT: Undeliverable: GEET - Downtime Notification for E411
SendDate: Mon Jan 23 06:34:12 PST 2017
FLAGS: 
X-Mailer NOT available
CONTENT-TYPE: multipart/mixed; 
        boundary=_f21b488c-e1c0-4de8-9c64-2579a8c7a35d_
This is a Multipart
---------------------------
  CONTENT-TYPE: text/plain; charset=us-ascii
  This is plain text
  ---------------------------
  CONTENT-TYPE: message/rfc822
  This is a Nested Message
  ---------------------------
    This is the message envelope
    ---------------------------
    FROM: Microsoft Outlook <MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@pocmchase.com>
    REPLY TO: Microsoft Outlook <MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@pocmchase.com>
    TO: rasem017@eddbas-pyr20v.svr.emea.pocmchase.net
    SUBJECT: Undeliverable: GEET - Downtime Notification for E411
    SendDate: Mon Jan 23 06:34:12 PST 2017
    FLAGS: 
    X-Mailer NOT available
    CONTENT-TYPE: multipart/report; report-type=delivery-status; 
        boundary=_647f43cc-ceff-4427-bc28-e7366392af1f_
    This is a Multipart
    ---------------------------
      CONTENT-TYPE: multipart/alternative; differences=Content-Type; 
        boundary=_0208790d-52b7-4d11-b3c4-37e958eea557_
      This is a Multipart
      ---------------------------
        CONTENT-TYPE: text/plain; charset=us-ascii
        This is plain text
        ---------------------------
        CONTENT-TYPE: text/html; charset=us-ascii
        ---------------------------
      CONTENT-TYPE: message/delivery-status
      ---------------------------
      CONTENT-TYPE: message/rfc822
      This is a Nested Message
      ---------------------------
        This is the message envelope
        ---------------------------
        FROM: geet.alerts@pocmchase.com
        REPLY TO: geet.alerts@pocmchase.com
        TO: geet.alerts@pocmchase.com
        SUBJECT: GEET - Downtime Notification for E411
        SendDate: Mon Jan 23 06:33:42 PST 2017
        FLAGS: 
        X-Mailer NOT available
        CONTENT-TYPE: text/html; charset='us-ascii'
        ---------------------------

先生,我从msgshow.java获得第三个主题。但我没有通过mimessageparser访问。我还更改了内容类型:text/plain;字符集=eml文件中的us ascii。我想通过MIMessageParser得到结果。对不起,我帮不了你。它不是JavaMail的一部分,我对此一无所知。