2017-07-19 1 views
0

Ich möchte die Header-Reihenfolge meiner Mime-Nachricht festlegen. Ich habe versucht, mimemessage zu implementieren und überschreiben writeTo-Methode. Aber ich kann nicht verstehen, wie es funktioniert. Ich habe eine Beispielnachricht gesendet, erhielt aber die Header zweimal. Kann mir bitte jemand helfen, Klarheit darüber zu bekommen. Unten ist meine Nachrichtenklasse.Set Header-Bestellung mit 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); 
     } 
    } 
} 

Vielen Dank im Voraus.

Antwort

0

Ähm, warum müssen Sie die Header-Reihenfolge steuern?

Standardmäßig wird JavaMail die bekannten Header in der Reihenfolge einfügen, die von den Internet-RFCs empfohlen wird. Wenn Sie einen rechtmäßigen Grund haben, die Header in eine andere Reihenfolge zu bringen, können Sie MimeMessage von der Unterklasse entfernen und die createInternetHeaders-Methode überschreiben, um Ihre eigene Unterklasse der InternetHeaders-Klasse bereitzustellen, die die Header in der gewünschten Reihenfolge platziert.

Oder Sie können Unterklasse MimeMessage und überschreiben Sie einfach die writeTo Methode, um die Header in der gewünschten Reihenfolge abzurufen und auszugeben. Vielleicht finden Sie es hilfreich, die MimeMessage source code zu betrachten.

+0

Ich habe beide Fälle ausprobiert. Wenn ich jedoch die oben genannten Methoden überschreibe und die erforderliche Reihenfolge einstelle, werden die Header als Inhalt betrachtet. Zum Beispiel habe ich ** To ** Header mit einem Wert [email protected] gesetzt. Aber wenn ich die E-Mail sende, gibt es javax.mail.SendFailedException: Keine Empfängeradresse Ausnahme. Wenn ich die Empfängeradresse explizit festlege, erhalte ich die E-Mail mit zwei ** To ** Kopfzeilen. Bitte helfen Sie mir zu finden, wo ich vermisse. Danke für die Antwort. –

+0

Ich muss den Code sehen, um zu sehen, was Sie falsch gemacht haben. Wenn du es hier nicht posten willst, sende es mir an [email protected] –

+0

Vielen Dank. Sendete den Code an [email protected] von [email protected] Warte auf deine Antwort. Vielen Dank. –

0

Endlich kann ich die Header-Reihenfolge einstellen. Vielen Dank Bill Shannon. Danke für die Hilfe. Unten ist meine Nachrichtenklasse.

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); 
     } 
    } 
}