Про MS Exchange 2010SP2
Цитата:
Сообщение от
Raven Melancholic
Если общаться только с MS Exchange, то тоже нет вопросов - использование EWS (пока не знаю подводных камней, но вроде бы подходит).
В X++ EWS(reference Microsoft.Exchange.WebServices) не получилось напрямую использовать, авторизация под доменной учетке (AD) для ящиков не хотела проходить, пришлось на C# внешний reference сделать и из X++ вызывать его для чтения, получения и отправки отправки писем. За пару часов пишется все на C# . Единственное что не удалось понять как найти уникальный идентификатор у письма полученного с exchange. Все работает без проблем больше года для системы документооборота.
"Получить список входящих и отправленных писем независимо от того, в общей папке они находятся или разбросаны по разным папкам.
"
Да
"Зная конкретное письмо (по предыдущему пункту) получить его данные (включая, например, вложения)."
Да можно, в html формате само письмо скачивается(eml) и приложения скачать в виде файлов.
Сложного ничего нет.
PHP код:
С#
xchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2, TimeZoneInfo.FindSystemTimeZoneById("UTC"));
service.Credentials = new WebCredentials(mailbox, pass);
service.AutodiscoverUrl(mailbox2, RedirectionUrlValidationCallback);
try
{
ItemView view1 = new ItemView(100);
SearchFilter filter1;
if (direct == "")
{
view1.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
filter1 = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, datet.Date);
}
else
{
view1.OrderBy.Add(ItemSchema.DateTimeSent, SortDirection.Ascending);
filter1 = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeSent, datet.Date);
}
FindItemsResults<Item> findResults1;
if (direct == "")
{
findResults1 = service.FindItems(WellKnownFolderName.Inbox, filter1, view1);
}
else
{
findResults1 = service.FindItems(WellKnownFolderName.SentItems, filter1, view1);
}
if (findResults1 != null && findResults1.Items != null)
res[6] = findResults1.Items.Count.ToString();
ItemView view = new ItemView(100);
SearchFilter filter;
if (direct == "")
{
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, datet);
}
FindItemsResults<Item> findResults;
if (direct == "")
{
findResults = service.FindItems(WellKnownFolderName.Inbox, filter, view);
}
else
{
findResults = service.FindItems(WellKnownFolderName.SentItems, filter, view);
}
if (findResults != null && findResults.Items != null && findResults.Items.Count > 0)
{
Item item = findResults.Items[0];
EmailMessage message2 = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly,
ItemSchema.DateTimeReceived));
EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.DateTimeReceived,
ItemSchema.DateTimeCreated,
ItemSchema.Body, ItemSchema.Subject, ItemSchema.Attachments, ItemSchema.HasAttachments,ItemSchema.DateTimeSent,ItemSchema.Id));
EmailMessage emailMessage = EmailMessage.Bind(service, item.Id);
...............
и т.д.