2011-12-03 13 views
13

¿Cómo puedo configurar el id. De mensaje SMTP mientras envío correos con javax.mail. Mi servidor de correo está informando algo como esto:¿Cómo configuro o cambio el SMTP Message-ID con 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 

que desea establecer la [email protected] antes de enviarlo. es posible? El correo electrónico se crea de esta manera:

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

Respuesta

21

Creo que esta sección de la JavaMail FAQ responde a su pregunta:

Q: puse un valor particular para la cabecera Message-ID de mi nuevo mensaje , pero cuando envío este mensaje ese encabezado se reescribe.

A: Un nuevo valor para el campo identificador del mensaje se establece cuando se llama al método saveChanges (por lo general de forma implícita cuando un mensaje es enviado ), sobrescribiendo cualquier valor que se fija. Si necesita establecer su propio ID de mensaje y conservarlo, tendrá que crear su propia subclase MimeMessage, anular el método updateMessageID y usar una instancia de esta subclase.

class MyMessage extends MimeMessage { 
    ... 

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

Según Oracle's FAQ, cuando se envía el mensaje o llamar saveChanges, la cabecera Message-Id establecido por el método updateMessageID(), que anula cualquier valor que puede ser que ya haya establecido.

Para establecer su propio valor, tendrá que crear una subclase de MimeMessage e implementar su propia función updateMessageID():

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

pude utilizar esta técnica para suprimir o eliminar el mensaje -id encabezado así:

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

esto era útil para Mailgun, que establece los propios Mensaje-Id, si no se establece una.

1

También puede guardar el mensaje Cambios y configurar el Id. De mensaje personalizado antes de enviarlo. Pasos:

  1. crear mensaje MimeMessage y establecer sus datos.
  2. message.saveChanges();
  3. message.setHeader ("Message-ID", yourCustomMessageId);
  4. enviar mensaje.
0
MimeMessage msg = new MimeMessage(s) { 
    @Override 
    protected void updateMessageID() { } // Prevent MimeMessage from overwriting our Message-ID 
}; 
msg.setHeader("Message-ID", "MyOwnMessageID"); 
0

este es el código completo de la aplicación de la ID personalizado en el mensaje

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