2011-12-03 11 views
13

W jaki sposób ustawić identyfikator SMTP podczas wysyłania wiadomości z numerem javax.mail. Mój serwer poczty donosi coś takiego:Jak ustawić lub zmienić ID wiadomości SMTP za pomocą javax.mail?

1 <= [email protected] H=mail (host) [192.168.1.4] P=esmtp S=142014 
    [email protected] 
2 => [email protected] R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8] 
3 Completed 

Chcę ustawić [email protected] przed wysłaniem. czy to możliwe? Wiadomość e-mail jest stworzony tak:

Properties props = System.getProperties(); 
props.put("mail.smtp.host", "192.168.1.4"); 
Session session = Session.getDefaultInstance(props, null); 
session.setDebug(false); 
Message msg = createMsg(); 
Transport.send(msg); 

Odpowiedz

21

Wierzę, że ta sekcja JavaMail FAQ odpowiedzi na swoje pytanie:

Q: ustawić konkretną wartość dla nagłówka Message-ID mojej nowej wiadomości , ale kiedy wyślę tę wiadomość, nagłówek zostanie przepisany.

A: nową wartość w polu Message-ID jest ustawiany, gdy metoda SaveChanges nazywa się (zazwyczaj w sposób dorozumiany, gdy wiadomość jest wysłane), zastępując dowolną wartość, którą się ustawić. Jeśli musisz ustawić swój własny Message-ID i zachować go, będziesz musiał utworzyć własną podklasę MimeMessage, zastąpić metodę updateMessageID i użyć instancji tej podklasy.

class MyMessage extends MimeMessage { 
    ... 

    protected void updateMessageID() throws MessagingException { 
    setHeader("Message-ID", "my-message-id"); 
    } 
    ... 
} 
10

Według Oracle's FAQ, podczas wysyłania wiadomości lub SaveChanges, nagłówek Message-ID SET metodą updateMessageID(), która zastępuje wszelkie wartość, którą można nazwać już ustawiony.

Aby ustawić własną wartość, trzeba będzie utworzyć podklasę MimeMessage i zaimplementować własną updateMessageID() Funkcja:

class MyMimeMessage extends MimeMessage { 
    ... 
    protected void updateMessageID() throws MessagingException { 
     setHeader("Message-ID", "my-message-id"); 
    } 
    ... 
} 

udało mi się wykorzystać tę technikę w celu powstrzymania lub wyeliminowania wiadomość -Id taki nagłówek:

@Override 
protected void updateMessageID() throws MessagingException { 
    removeHeader("Message-Id"); 
} 

Przydało się to do programu Mailgun, który sam ustawia ID wiadomości, jeśli go nie ustawisz.

1

Możesz również zapisać zmiany w wiadomościach i ustawić niestandardowy komunikat przed wysłaniem. Kroki:

  1. utwórz wiadomość MimeMessage i ustaw jej dane.
  2. message.saveChanges();
  3. message.setHeader ("Message-ID", yourCustomMessageId);
  4. wysłać wiadomość.
0
MimeMessage msg = new MimeMessage(s) { 
    @Override 
    protected void updateMessageID() { } // Prevent MimeMessage from overwriting our Message-ID 
}; 
msg.setHeader("Message-ID", "MyOwnMessageID"); 
0

to kompletny kod do wdrożenia niestandardowego identyfikatora w komunikacie

public class SendMessage{ 

    private String idMessage; 

    private void sendEmail() { 
     //... 
     // Create de session 
     //... 

     Message message = new MyMessage(session); 

     //... 
     // Prepare the body of the message, attachments, etc. 
     //... 

     // assign custom message id 
     this.idMessage = “My own ID”; 

     //send 
     Transport.send(message); 
    } 

    class MyMessage extends MimeMessage { 

     public MyMessage(Session session) { 
      super(session); 
     } 

     protected void updateMessageID() throws MessagingException { 
      setHeader("Message-ID", this.idMessage); 
     } 
    } 
} 
Powiązane problemy