Идентификатор сообщения заменяется при отправке почты через JavaMail - PullRequest
3 голосов
/ 28 ноября 2011

Я попытался найти решение этой проблемы с любой удачей, поэтому я решил опубликовать его здесь.

Проблема в том, что когда я отправляю сообщение с помощью javaMail, он автоматически генерирует Message-Id (Тот, который я храню в своей базе данных, чтобы затем идентифицировать ответы на это сообщение), но он по какой-то причине изменяется сервером smpt при отправке сообщения, поэтому я не смогу отследить что-либо связанное с этим сообщением.

Например

Сначала я отправляю сообщение через gmail на одну из учетных записей, синхронизированных с моим почтовым клиентом, затем я проверяю сообщение с помощью моего почтового клиента, и все в порядке. Идентификатор сообщения

* 1008.*<CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com>

Затем я отправляю ответ на это сообщение через мой почтовый клиент, сгенерированный javaMail идентификатор:

<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>

Наконец, когда я иду напроверьте ответ в моей учетной записи электронной почты, в заголовках которого есть следующие значения

Message-ID: <BLU0-SMTP33091BE2B32A7F46E370665C2C90@phx.gbl> FAIL

In-Reply-To: <CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com> OK

Как видите, идентификатор сообщения:изменилось, я ожидал, что бe

<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>

Почему это происходит?

Я ценю любую помощь

Спасибо всем

- Редактировать

В соответствии с sugestions я сделал тест, используя демонстрацию smtpsend из javaMail (я создал подкласс MimeMessage для генерации собственного идентификатора сообщения).

java -jar -Dmail.smtp.starttls.enable=true -Dmail.smtp.port=587 SMTPSend.jar -d -M smtp.live.com -U myaccount@hotmail.com -P mypass -o myaccount@hotmail.com -A anotheraccount@gmail.com

Between smtpsendна выходе при отправке сообщения был сгенерирован идентификатор сообщения

<60eea6ae-2657-41bd-b475-3a57eff885ac@mydomain.com>

Но затем, когда я пошел проверить это сообщение на anotheraccount@gmail.com, идентификатор сообщения былразные

<BLU0-SMTP109215E6BB99B93FC106B1E88B00@phx.gbl>

Почему он меняет мой Идентификатор сообщения на лету ... я не понимаю

- Изменить 2

Я заметил, что проблема теперь возникает именно тогда, когда я отправляю почту с учетной записи hotmail, идентификатор сообщения больше не меняется, когда я отправляю почту с учетной записи gmail (я думаю, что реализация моего собственного метода генерации Message-Id помогла решить эту проблему)

Спасибо, что ответили

Ответы [ 2 ]

2 голосов
/ 13 октября 2016

Я знаю, что это старая ветка, но этот ответ, возможно, еще может помочь людям.

Вам необходимо отменить updateMessageID () в MimeMessage, так как он вызывается каждый раз перед отправкой электронного письма.

class MyMessage extends MimeMessage {

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

    protected void updateMessageID() throws MessagingException {
        setHeader("Message-ID", "<your-message-id@domain.nl>");
    }
}

И если вы хотите передать уникальный идентификатор для каждого сообщения MyMessage ...

class MyMessage extends MimeMessage {
        String uniqueMessageId;     

        public MyMessage(Session session, String uniqueMessageId) {
            super(session);
            this.uniqueMessageId = uniqueMessageId;

        }

        protected void updateMessageID() throws MessagingException {
            setHeader("Message-ID", "<" + uniqueMessageId + ">");
        }
    }

А затем назовите его, например:

MyMessage message = new MyMessage(session, "201610131428_newsletter1@domain.nl");
0 голосов
/ 28 ноября 2011

Ваш почтовый сервер сломан. Не следует изменять заголовок Message-ID. Сообщите о проблеме владельцу вашего почтового сервера.

...