繁体   English   中英

访问message / rfc822附件的临近主题时,我们将获得Null

[英]We Get Null when accessing the innear subject of a message/rfc822 attachment

输入项

https://i.stack.imgur.com/MnfDs.png

在上图中,我们提到了输入文件,该文件以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的停机通知 我找不到我做错了的地方,所以请帮助我。

根据您添加到此不相关的JavaMail错误报告中的数据 ,问题可能是该消息的格式不正确。 附件消息具有以下标头:

Content-Type: text/html; charset="'us-ascii'"

字符集值被引用两次,这在寻找字符集转换器对内容进行解码时会导致失败。 您也许可以使用JavaMail FAQ中描述技术来处理此假字符集值

我对MimeMessageParser一无所知,但是即使忽略了JavaMail上面的字符集问题,也能够使用MimeMessage类和msgshow.java示例程序正确解析消息:

$ 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'
        ---------------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM