2013-10-11 11 views
0


Итак, я отправляю приглашения ICal с помощью Java Mail, я даю каждому из них идентификатор сообщения. Теперь, если кто-то отвечает, принимая/отклоняясь, я получаю ответное письмо, но с другим идентификатором сообщения.
Кажется, Outlook создает новые идентификаторы сообщений и выбрасывает каждый заголовок, который я установил в приглашении, есть ли способ сопоставить отправленное приглашение с ответами или наоборот?Как сопоставить ответные письма с отправленными приглашениями (Java Mail)

Вот что он показывает, когда я смотрю на мой заголовок интернет приглашения:

Return-Path: 
X-Original-To: 
Delivered-To: 
Received: from 
by 
for ; Tue, 15 Oct 2013 09:52:39 +0200 (CEST) 
From: 
To: 
Message-ID: 11111111111111111111111111 
Subject: TestMail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; 
boundary="----=_Part_0_694990101.1381823559402" 
UID: 114442 
ContentID: blabla 

А вот что заголовок ответа выглядит как:

Return-Path: 
X-Original-To: 
Delivered-To: 
Received: from 
for ; Tue, 15 Oct 2013 09:52:44 +0200 (CEST) 
From: 
To: 
Subject: Accepted: TestMail 11.10 
Date: Tue, 15 Oct 2013 09:52:44 +0200 
Message-ID: <[email protected]@me.com> 
MIME-Version: 1.0 
Content-Type: text/calendar; method=REPLY; 
charset="utf-8" 
Content-Transfer-Encoding: 7bit 
X-Mailer: Microsoft Office Outlook 12.0 
Thread-Index: Ac7Je4UCPB4Lb2ZERnCPQEx3IbfpbQAAAEBQAAAAkSA= 
Content-Language: de 


Спасибо за любой помогите заранее!

ответ

0

Я получил его! Мне нужно было прочитать тело ответа, а не заголовок. Все, что я установил, хранилось в теле. Чтобы получить содержание тела, вы должны получить InputStream, как это:

Folder folder = store.getFolder("Inbox"); 
folder.open(Folder.READ_WRITE); 
Message message[] = folder.getMessages(); 
InputStream in = messages.getInputStream(); 

Тогда вы просто должны написать типичный IO Reader, чтобы получить строки, разбить его и принимать значения, которые вы установили. Вот и все.

0

Если ответ включает исходный объект, вы можете поместить что-то в заголовок темы. Вы также можете рассмотреть возможность создания уникальных адресов для каждого приглашения. Возможно, есть уникальный идентификатор, который вы можете поместить в самое приглашение, которое будет включено в ответ.

0

Ну, свойство iID для iCalendar было определено именно для этой цели. См. http://tools.ietf.org/html/rfc5545#section-3.8.4.7

Каждый ответ должен содержать свойство UID (внутри компонента VEVENT), соответствующее значению из исходного запроса. Вы не должны полагаться на механизм транспорта (iMIP здесь, но это может быть iSchedule), чтобы выполнить сопоставление.

+0

Да, я также установил этот UID, но проблема в том, что кто-то отвечает на приглашение, и я получаю сообщение об утере/принятии, в заголовке нет ни UID, ни каких-либо других, которые я установил в заголовке. Похоже, что Outlook отбрасывает мою информацию. – user2870415

+0

UID - это не заголовок, а свойство iCalendar. Таким образом, это должно быть в приложении text/calendar, которое возвращается с ответом. – arnaudq

0

У меня была аналогичная проблема, когда я использовал Amazon SES в качестве моего SMTP-сервера, он перегрузил мой Javamail Message-ID и заменил его собственным. Короткое и простое решение было бы отправить случайно сгенерированный UID в опорном заголовке (Reference заголовок обычно не переписано большинство провайдеров услуг электронной почты): -

Что-то вроде этого: email.setHeader("References", reference); где ссылки заголовок, как это : reference = UUID.randomUUID().toString()+"@email.abcd.com"

Более подробной информации о справочном заголовке, увидеть это: http://cr.yp.to/immhf/thread.html

+0

Я сделал это, но когда я получаю ответ на мое приглашение, вся информация, которую я установил в заголовке, исчезает. – user2870415

+0

Можете ли вы показать мне код, в котором вы установили ссылочный заголовок сообщения электронной почты, и в формате уместил ли он заголовок ссылки? формат должен быть как указано в http://cr.yp.to/immhf/thread.html, заключенном в угловые скобки – user96546