Показать сообщение отдельно
Старый 09.05.2018, 23:35   #3  
TDV is offline
TDV
Участник
 
128 / 30 (2) +++
Регистрация: 04.11.2005
Про 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_SP2TimeZoneInfo.FindSystemTimeZoneById("UTC"));
           
            
service.Credentials = new WebCredentials(mailboxpass);
            
service.AutodiscoverUrl(mailbox2RedirectionUrlValidationCallback);
            try
            {

                
ItemView view1 = new ItemView(100);
                
SearchFilter filter1;
                if (
direct == "")
                {
                    
view1.OrderBy.Add(ItemSchema.DateTimeReceivedSortDirection.Ascending);
                    
filter1 = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceiveddatet.Date);
                }
                else
                {

                        
view1.OrderBy.Add(ItemSchema.DateTimeSentSortDirection.Ascending);
                        
filter1 = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeSentdatet.Date);
                   
                }
               
                
FindItemsResults<ItemfindResults1;
                if (
direct == "")
                {
                     
findResults1 service.FindItems(WellKnownFolderName.Inboxfilter1view1);
                }
                else
                {
                    
findResults1 service.FindItems(WellKnownFolderName.SentItemsfilter1view1);
                }
                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.DateTimeReceivedSortDirection.Ascending);
                    
filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceiveddatet);
                }
               
                
FindItemsResults<ItemfindResults;
                if (
direct == "")
                {
                    
findResults service.FindItems(WellKnownFolderName.Inboxfilterview);
                }
                else
                {
                    
findResults service.FindItems(WellKnownFolderName.SentItemsfilterview);
                }

                if (
findResults != null && findResults.Items != null && findResults.Items.Count 0)
                {

                    
Item item findResults.Items[0];
                    
EmailMessage message2 EmailMessage.Bind(serviceitem.Id, new PropertySet(BasePropertySet.IdOnly,
                    
ItemSchema.DateTimeReceived));

                    
EmailMessage message EmailMessage.Bind(serviceitem.Id, new PropertySet(BasePropertySet.IdOnlyItemSchema.DateTimeReceived,
                    
ItemSchema.DateTimeCreated,
                    
ItemSchema.BodyItemSchema.SubjectItemSchema.AttachmentsItemSchema.HasAttachments,ItemSchema.DateTimeSent,ItemSchema.Id));
                    
EmailMessage emailMessage EmailMessage.Bind(serviceitem.Id);
...............
и т.д

Последний раз редактировалось TDV; 09.05.2018 в 23:37. Причина: добавлено eml
За это сообщение автора поблагодарили: Raven Melancholic (5), sukhanchik (4).