javax.mail
でメールを送信するときにSMTPメッセージIDを設定するにはどうすればよいですか。私のメールサーバーは次のようなことを報告しています:
1 <= [email protected] H=mail (Host) [192.168.1.4] P=esmtp S=142014
[email protected]
2 => sombodey@else R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8]
3 Completed
送信する前に[email protected]
を設定したいのですが。これは可能ですか?次のように作成されたメール:
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);
JavaMail FAQ のこのセクションがあなたの質問に答えると思います:
Q:新しいメッセージのMessage-IDヘッダーに特定の値を設定しましたが、このメッセージを送信すると、そのヘッダーが書き換えられます。
A:saveChangesメソッドが呼び出されると(通常はメッセージが送信されるときに暗黙的に)、Message-IDフィールドの新しい値が設定され、任意の値が上書きされますあなたは自分自身を設定します。独自のMessage-IDを設定して保持する必要がある場合は、独自のMimeMessageサブクラスを作成し、updateMessageIDメソッドをオーバーライドして、このサブクラスのインスタンスを使用する必要があります。
class MyMessage extends MimeMessage { ... protected void updateMessageID() throws MessagingException { setHeader("Message-ID", "my-message-id"); } ... }
OracleのFAQ によると、メッセージを送信するか、saveChangesを呼び出すと、updateMessageID()メソッドによって設定されたMessage-Idヘッダーが、すでに設定されている値を上書きします。
独自の値を設定するには、MimeMessageのサブクラスを作成し、独自のupdateMessageID()関数を実装する必要があります。
class MyMimeMessage extends MimeMessage {
...
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "my-message-id");
}
...
}
この手法を使用して、次のようにMessage-Idヘッダーを抑制または削除することができました。
@Override
protected void updateMessageID() throws MessagingException {
removeHeader("Message-Id");
}
これは、メッセージIDを設定しない場合にメッセージID自体を設定するMailgunに役立ちました。
送信する前に、メッセージの変更を保存し、カスタムメッセージIDを設定することもできます。手順:
MimeMessage message
_を作成し、そのデータを設定します。message.saveChanges();
message.setHeader("Message-ID", yourCustomMessageId);
これは、SpringのJavaMailSender
や、MimeMessage
をオーバーライドするのが難しいその他の状況で役立ちます。
これは、メッセージにカスタムIDを実装するための完全なコードです。
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);
}
}
}
MimeMessage msg = new MimeMessage(s) {
@Override
protected void updateMessageID() { } // Prevent MimeMessage from overwriting our Message-ID
};
msg.setHeader("Message-ID", "MyOwnMessageID");