Как сменить MessageID ? (javax.mail и SMTP)

Если вы уже скрыли (например, через Tor) свой IP, скрыли имя вашего хоста, выставив свойство «mail.smtp.localhost», то остаётся последний рубеж в метаданных письма, который может вас явно выдать. Нужно поменять MessageID!
А сменить его можно следующим образом:
- Необходимо создать свой класс MyMessage, унаследовавшись от класса MimeMessage из пакета javax.mail.internet, и перегрузить метод updateMessageID().
class MyMessage extends MimeMessage {
@Override
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "любую хуету");
}
//Остальное не особо важно
public MyMessage(Session session) {
super(session);
}
public MyMessage
(Session session,
InputStream is
) throws MessagingException
{ super(session, is);
}
public MyMessage(MimeMessage source) throws MessagingException {
super(source);
}
protected MyMessage(Folder folder, int msgnum) {
super(folder, msgnum);
}
protected MyMessage
(Folder folder,
InputStream is,
int msgnum
) throws MessagingException
{ super(folder, is, msgnum);
}
protected MyMessage(Folder folder, InternetHeaders headers, byte[] content, int msgnum) throws MessagingException {
super(folder, headers, content, msgnum);
}
}
- При создании письма использовать свой MyMessage.
properties.setProperty("mail.smtp.host", "SMTP хост тут всё просто");
// опция указывает, что мы будет логинится на SMTP сервере
properties.put("mail.smtp.auth", "true");
// опции для того чтобы работать через TOR
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.socks.host", "Адрес сокс прокси");
properties.put("mail.smtp.socks.port", "порт прокси");
// полезная опция для проверки работоспособности и всего процесса отправки
// properties.put("mail.socket.debug",true);
// А это чтобы вашу анонимную жопу не вычеслили по метаданным
properties.put("mail.smtp.localhost","Пишите что вам взудмается");
// создаём сессию
Session session
= Session.
getInstance(properties,
new Authenticator() { }
});
try{
// формируем и отправляем сообщение
MimeMessage message = new MyMessage(session);
message.setContentID("Ид контента");
message.setFrom(new InternetAddress("от кого"));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress("кому"));
message.setSubject("Тема письма");
message.setText("Что вы там и кому хотели отправить");
Transport.send(message);
}catch (MessagingException mex) {
mex.printStackTrace();
}
Вот собственно и всё.