2017-07-19 64 views
0

我想設置我的mime消息的標題順序。我嘗試過實現mimemessage並重寫writeTo方法。但是,我無法理解它是如何工作的。我發送了一條示例消息,但最終收到了兩次頭文件。任何人都可以請幫我清楚這一點。以下是我的消息類。使用javamail設置標題順序

public class MyMessage extends MimeMessage{ 
    private String subject; 
    private String encodingtype; 
    public MyMessage(Session session) { 
     super(session); 
     this.session=session; 
    } 
    @Override 
    public void writeTo(OutputStream out) throws java.io.IOException, MessagingException{ 
     try{ 
      String replyto = ("\""+displayname+"\" <"+displayfrom+">"); 
      String fromheader = ("\""+displayname+"\" <"+mailfrom+">"); 
      out.write(("Date: "+new Date()+"\r\n").getBytes("UTF-8")); 
      out.write(("From: "+fromheader+"\r\n").getBytes("UTF-8")); 
      out.write(("Reply-To: "+replyto+"\r\n").getBytes("UTF-8")); 
      out.write(("To: "+getAddress(email)+"\r\n").getBytes("UTF-8")); 
      out.write(("Content-Type: text/html; charset=\"UTF-8\"\r\n").getBytes("UTF-8")); 
      out.write(("Content-Transfer-Encoding: "+encodingtype+"\r\n").getBytes("UTF-8")); 
      out.write("\r\n".getBytes("UTF-8")); 
      out.write("<html><body><h1>HI</h1></body></html>\r\n".getBytes("UTF-8")); 
     }catch(Exception e){ 
      System.out.println(e); 
     } 
    } 
} 

在此先感謝。

回答

0

嗯,你爲什麼需要控制標題順序?

默認情況下,JavaMail將按照Internet RFC建議的順序放置衆所周知的標頭。如果您有一些合法的理由將標題置於不同的順序,您可以繼承MimeMessage子類並覆蓋createInternetHeaders方法,以提供您自己的InternetHeaders類的子類,該子類將按您希望的順序放置標題。

或者您可以繼承MimeMessage,只是覆蓋writeTo方法以按您想要的順序獲取和輸出標題。您可能會發現查看MimeMessage source code有幫助。

+0

我試過這兩種情況。但是,當我重寫上述方法並設置所需的順序時,標題被視爲內容。例如,我已將** To **標頭設置爲值[email protected]。但是,當我發送電子郵件給javax.mail.SendFailedException:沒有收件人地址異常。如果我明確設置收件人地址,我正在收到帶有兩個** To **標題的電子郵件。請幫我找到我失蹤的地方。謝謝回覆。 –

+0

我需要看看代碼,看看你做錯了什麼。如果您不想在此發佈,請通過[email protected]發送給我。 –

+0

非常感謝。將代碼從[email protected]發送到[email protected]。等待您的回覆。謝謝。 –

0

最後我可以設置標題的順序。非常感謝比爾香農。謝謝您的幫助。以下是我的留言班。

public MyMessage(Session session, String fromdomain, String format, 
     String blastid, String listid, String offerid, int blastinstanceid, 
     String displayname, String displayfrom, String mailfrom, String email, String subject, 
     String encodingtype, String content) { 
     super(session); 
     this.session=session; 
     this.fromdomain = fromdomain; 
     this.format = format; 
     this.blastid = blastid; 
     this.listid = listid; 
     this.offerid = offerid; 
     this.blastinstanceid = blastinstanceid; 
     this.displayname = displayname; 
     this.displayfrom = displayfrom; 
     this.mailfrom = mailfrom; 
     this.email = email; 
     this.subject = subject; 
     this.content = content; 
     try{ 
      setFrom(getAddress(displayfrom)); 
      setSentDate(new Date()); 
      setRecipients(RecipientType.TO, email); 
      setSubject(subject); 
      setReplyTo(getAddress2(mailfrom)); 
      setHeader("Message-Id", getUniqueMessageIDValue(session, 
fromdomain, format, blastid, listid, offerid, blastinstanceid)); 
     }catch(Exception e){ 
      System.out.println(e); 
     } 
    } 
    @Override 
    public void writeTo(OutputStream out, String[] ignoreList) throws 
java.io.IOException, MessagingException{ 
     LineOutputStream los = null; 
     try{ 
      if (!saved) 
       saveChanges(); 

     String replyto = ("\""+displayname+"\" <"+displayfrom+">"); 
     String fromheader = ("\""+displayname+"\" <"+mailfrom+">"); 
     los = new LineOutputStream(out); 
     los.writeln("Date: "+getHeader("Date", null)); 
     los.writeln("Message-Id: " +getHeader("Message-Id",null).toString()); 
     los.writeln("From: "+fromheader); 
     los.writeln("Reply-To: "+replyto); 
     los.writeln("To: "+getHeader("To",",").toString()); 
     System.out.println("From header is "+getHeader("From",",")+" mail from is "+mailfrom); 
     //out.write(Message.RecipientType.TO, getAddress(email)); 
     los.writeln("subject: "+getHeader("Subject",null).toString()); 

     Enumeration hdrLines = getNonMatchingHeaderLines(ignoreList); 
     while (hdrLines.hasMoreElements()) 
      los.writeln((String)hdrLines.nextElement()); 
     los.writeln(); 
    }catch(Exception e){ 
     System.out.println(e); 
    }finally{ 
     try{ 
      if(los != null) los.flush(); 
     }catch(Exception e){ 
      System.out.println(e); 
     } 
    } 
}