AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.05.2018, 19:19   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Обработка из DAX2009 писем в разных почтовых серверах по каким-то общим технологиям
Коллеги, добрый день.
Имеем DAX2009, Интересует концептуальный вопрос - чем пользоваться для обработки разных почтовых ящиков по отправленным и входящим письмам, которые не отправлялись и DAX, но нужно иметь данные как по отправленным, так и по входящим письмам на нескольких почтовых ящиках, которые расположены на разных типах почтовых серверах и письма рассортированы по разным папкам?
Естественно, интересует обработка программно из DAX.
В общем виде задача от больших боссов выглядит так:
  • Существует несколько почтовых ящиков для общения с клиентами (по претензиям, по рекламе, по чему-то еще), часть из них это внешние облачные службы, часть это внутренний сервер почты (пока MS Exhange, но не исключено что будет другой).
  • Клиенты пишут нам письма, мы на них отвечаем (перед ответом можем переслать это письмо во внутренней почте, но это нас не интересует, главное письма Клиент-Мы и Мы-Клиент)
  • В этих почтовых ящиках есть папки Входящие и Отправленные, внутри этих папок создаются подпакпи по темам, в которые либо по правилам, либо вручную письма переносятся из папок по умолчанию входящие/отправленные.
  • По некоторым из папок входящих и отправленных писем (корневых или вложенных) нужно получать в DAX2009 некоторые данные из этих писем (предположим, EMail клиента, тема, кто ответил, текст письма, вложения и т.п.)
  • Врямя от времени эти почтовые ящики чистятся, но независимо от этого сам факт общения (и некоторые данные писем) нужно хранить в DAX (например, в течение срока исковой давности по претензиям).
Куда и как сохранять данные в общем-то не важно.
По частям что и как использовать понимаю:
  • Когда сам отправляю письма из DAX, то все об это знаю - пользую SMTP для отправки (и есть стандартные классы в dot.net), а сохраняю то что знаю и то что мне нужно.
  • При проверке входящих пользуюсь POP3 (да, нет стандартных классов в dot.net, не очень просто найти подходящую библиотеку или создать свою, но все решаемо).
  • Если общаться только с MS Exchange, то тоже нет вопросов - использование EWS (пока не знаю подводных камней, но вроде бы подходит).
  • Если работать с тем же Emarsys тоже все получается (ну ладно, пусть не совсем все, но многое), но это очень частный web сервис.
А сам вопрос в следующем - можно ли как-то обращаться к разным почтовым системам для того, чтобы:
  • Получить список входящих и отправленных писем независимо от того, в общей папке они находятся или разбросаны по разным папкам.
  • Зная конкретное письмо (по предыдущему пункту) получить его данные (включая, например, вложения).
Пусть в разных почтовых системах способы такой обработки отличаются, но главное чтобы эти возможности были (пока интересуют gmail.com, yandex.ru, mail.ru, ms exchange), но список совсем не полный.
В общем, есть ли какой-либо стандарт, пусть сложный, непонятный, но единый, для обращения и ко входящим и к отправленным письмам для семейства почтовых серверов когда мы не отправляем, мы не получаем письма сами, а только запрашиваем их данные?
Старый 09.05.2018, 21:10   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Если поставлю под сомнение уместность решения делать это в AX2009, будет ли это злобным оффтопом?
За это сообщение автора поблагодарили: TDV (1).
Старый 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).
Старый 10.05.2018, 07:17   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Если поставлю под сомнение уместность решения делать это в AX2009, будет ли это злобным оффтопом?
Не, оффтопом не будет - сам в шоке от задачи. Но делать придется - очень уж хотят, чтобы при общении с клиентом того же Callcenter сотрудник, подняв карточку клиента знал об истории общения с ним через разные каналы коммуникаций.
Старый 10.05.2018, 07:26   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от TDV Посмотреть сообщение
Про MS Exchange 2010SP2...
Спасибо за пример.
Пока хочется найти что-либо более не завязанное на конкретный тип сервера. Типа как есть стандарты отправки/получения SMTP, POP3, так же хочется понять есть ли какие-либо стандарты пусть даже неофициальные, но которых большинство почтовиков придерживается с точки зрения выбора нужных папок, получения информации о количестве писем в этих папках и т.п.
Старый 10.05.2018, 10:52   #6  
potential is offline
potential
Участник
 
84 / 35 (2) +++
Регистрация: 13.04.2012
Адрес: Санкт-Петербург
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Типа как есть стандарты отправки/получения SMTP, POP3,
Может вместо POP3 имеет смысл пользовать IMAP?
За это сообщение автора поблагодарили: Raven Melancholic (10), ax_mct (3).
Старый 10.05.2018, 11:53   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от potential Посмотреть сообщение
Может вместо POP3 имеет смысл пользовать IMAP?
Вот, как раз что-то из того что, возможно, нам нужно. Поизучаю вечерком.
Спасибо.
Старый 10.05.2018, 11:57   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
А не думали в сторону ограничиться интреграцией AX с одним сервером, нарп. Exсhange; на остальных же, настроить переадресацию входящих на основной. Сложность и надежность решения на порядок упрощается.
За это сообщение автора поблагодарили: Ivanhoe (2), ax_mct (3).
Старый 10.05.2018, 12:51   #9  
TDV is offline
TDV
Участник
 
128 / 30 (2) +++
Регистрация: 04.11.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
А не думали в сторону ограничиться интреграцией AX с одним сервером, нарп. Exсhange; на остальных же, настроить переадресацию входящих на основной. Сложность и надежность решения на порядок упрощается.
Может возникнуть потребность делать ответ с Exchange клиенту от имени почтового ящика на который он высылал письмо. У самих 4 разных почтовых адреса(4 ящика), и периодически приходится делать подмену почтового адреса отправки что-бы получатель не путался(на что отправил, с того и ответ получил). В Exchage не получится нормально без прав send As на учетку к привязанному(mailbox) изменить адрес отправки(send as), с этим были небольшие мучения.
Старый 10.05.2018, 13:09   #10  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от TDV Посмотреть сообщение
Может возникнуть потребность делать ответ с Exchange клиенту от имени почтового ящика на который он высылал письмо. У самих 4 разных почтовых адреса(4 ящика), и периодически приходится делать подмену почтового адреса отправки что-бы получатель не путался(на что отправил, с того и ответ получил). В Exchage не получится нормально без прав send As на учетку к привязанному(mailbox) изменить адрес отправки(send as), с этим были небольшие мучения.
Отправку писем можно оставить для каждого почтовика свою: протокол smtp, как правило, поддерживают все почтовые сервисы, и больших трудностей там нет. Разве что придется пройти квест с SSL, но опять же, процесс отправки видится одинаковым для всех почтовиков.

P.S. На гитхабе лежит готовый проект на C# для парсинга аутлуковских фалов *.msg, без участия последнего: достает всё что можно достать из письма, включая аттачменты и раскладывает по полкам. Это до кучи, может вам и не пригодится. Проект рабочий, мне очень помог в свое время.

Последний раз редактировалось DSPIC; 10.05.2018 в 13:19.
За это сообщение автора поблагодарили: TDV (1), Raven Melancholic (10).
Старый 10.05.2018, 13:19   #11  
TDV is offline
TDV
Участник
 
128 / 30 (2) +++
Регистрация: 04.11.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Отправку писем можно оставить для каждого почтовика свою: протокол smtp, как правило, поддерживают все почтовые сервисы, и больших трудностей там нет. Разве что придется пройти квест с SSL, но опять же, процесс отправки видится одинаковым для всех почтовиков.
Все правильно, варианты решения здесь есть, просто хотел уточнить про send as в Exchange, ведет себя не очевидно при подмене адреса отправителя, но в конечном итоге заработало.
Старый 10.05.2018, 13:20   #12  
potential is offline
potential
Участник
 
84 / 35 (2) +++
Регистрация: 13.04.2012
Адрес: Санкт-Петербург
Цитата:
Сообщение от DSPIC Посмотреть сообщение
А не думали в сторону ограничиться интреграцией AX с одним сервером, нарп. Exсhange; на остальных же, настроить переадресацию входящих на основной. Сложность и надежность решения на порядок упрощается.
как минимум требования связанные с папками будет трудно соблюсти

Последний раз редактировалось potential; 10.05.2018 в 14:25.
Старый 10.05.2018, 13:38   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от DSPIC Посмотреть сообщение
А не думали в сторону ограничиться интреграцией AX с одним сервером, нарп. Exсhange; на остальных же, настроить переадресацию входящих на основной. Сложность и надежность решения на порядок упрощается.
Со входящими, скорее всего, можно будет подумать в сторону этого. Непонятно что с отправленными из этих почтовых ящиков. Да и не очень понятно как определить от какого клиента изначально было письмо.
Старый 10.05.2018, 13:40   #14  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от DSPIC Посмотреть сообщение
...готовый проект на C# для парсинга аутлуковских фалов *.msg, без участия последнего
Вообще, подход интересный. Вполне возможно будет нарисовать макрос для Outlook, который будет выгружать сообщения в файлы, а потом эти файлы обрабатывать.
Нужно подумать, пообсуждать с коллегами.
Старый 10.05.2018, 13:57   #15  
TDV is offline
TDV
Участник
 
128 / 30 (2) +++
Регистрация: 04.11.2005
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
......
Да и не очень понятно как определить от какого клиента изначально было письмо.
и для этого пришлось свой helpdesk с тикетами разрабатывать на базе Enterprise portal, с автоответами с номером входящего для последующей переписки. Вот это очень не просто было внедрить. EP потому что сразу из письма по гиперссылке к заявке можно переходить и всю историю переписки видеть с прилагаемыми файлами и согласованиями. При том что уже был успешный опыт 4летнего использования стороннего HelpDesk (тоже было много вопросов пока внедрял), где себя этот HD зарекомендовал очень хорошо, переучивать отдел поддержки не пришлось

Последний раз редактировалось TDV; 10.05.2018 в 14:13. Причина: ошибки в тексте
Старый 10.05.2018, 19:15   #16  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от TDV Посмотреть сообщение
и для этого пришлось свой helpdesk с тикетами разрабатывать на базе Enterprise portal, с автоответами с номером входящего для последующей переписки.
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не, оффтопом не будет - сам в шоке от задачи. Но делать придется - очень уж хотят, чтобы при общении с клиентом того же Callcenter сотрудник, подняв карточку клиента знал об истории общения с ним через разные каналы коммуникаций.
На мой взгляд разумней взять за основу какую то уже существующую систему
CRM/HelpDesk к примеру
http://osticket.com/editions
или
https://oroinc.com/orocrm/orocrm-features
и внедрить нормальную CRM

И на том же PHP все будет несколько проще
http://php.net/manual/en/function.im...h-overview.php
https://stackoverflow.com/questions/...-inbox-folders

Засовывать все это в AX2009 не дальновидно. C точки зрения бизнеса конечно, а не AX программиста. Но и для AX программиста это возможность научиться чему-то новому.

IMHO конечно, но всегда если техническое решение требует чесания в голове значит надо пересматривать саму постановку задачи.
Старый 10.05.2018, 19:22   #17  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Но если .NET то возможно так
Simple IMAP CLIENT
System.Net.Sockets.TcpClient
System.Net.Security.SslStream
https://code.msdn.microsoft.com/wind...LIENT-b249d2e6
Старый 11.05.2018, 09:31   #18  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Есть библиотека openPop.net использовал ее для получения почты, дело было в 2012 версии, но как вариант рассмотреть можно.
https://www.codeproject.com/Articles...th-OpenPop-NET
За это сообщение автора поблагодарили: Raven Melancholic (5).
Старый 12.05.2018, 16:14   #19  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Так.
Судя по всему, я нарушил основное армейское правило по поводу спешки в выполнении приказов и колхозное правило трех гвоздей.
Задача очень резко поменялась - нужно обрабатывать только письма с корпоративного почтового ящика. По поводу внешних почтовых ящиков это были неуемные фантазии маретологов и CRMщиков, там такой бардак, что пользы от этих данных как от козла молока.
Отрезвили многих еще и заявления админов, что на Ecxhange протокол IMAP не поднят и ни при каких условиях поднят не будет. А мысли про замену Exchange чем-то другим в практически обозримом будущем это опять же только фантазии.
В общем, наш выбор это EMS.
Всем спасибо ,благодаря ветке узнал много новых и полезных слов - время потрачено не зря.
Старый 23.06.2018, 14:34   #20  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
TVD, как прошедший мой путь, просьба прокомментировать.
Использую EWS. Немного доработал библиотеку MS в части тех вещей, которые не поддерживаются в DAX (вложенные классы, статические свойства readonly, определенные не через get/set, а присваиванием и т.п.).
Могу подключаться как хочу - к своему ящику, олицетворением, делегированием и т.п. От разных пользователей тоже все работает (задание пользователя/пароля, по доменной учетке). Могу подключиться к любому ящику, для которого есть доступ, получить все что там есть (вообще, мне нужно только письма, но пробовал подключаться и к календарям, задачам - все доступно).
Только вот проблема - мне нужно понимать адресата и адресанта письма. Пока письмо отправлено внутри экземпляра Excange, все хорошо. Но как только письмо получено от внешнего отправителя, то свойства From, ToRecipients и другие объекта EmailMessage пустые.
Сталкивались ли Вы с тем, что письма, циркулирующие внутри экземпляра Exchange и поступившие из вне имеют разные свойства? Если сталкивались, то как можно получить адреса в случае, если письмо получено из внешнего ящика?

Последний раз редактировалось Raven Melancholic; 23.06.2018 в 14:39.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ролевой портал на разных серверах S.Scorpion DAX: Администрирование 0 18.01.2011 11:44
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02
Размещение базы данных на разных физических SQL серверах Alexandr A. Osipkin_imported DAX: Администрирование 2 13.02.2007 10:41
Размещение БД на физически разных SQL серверах. Alexandr A. Osipkin DAX: Администрирование 10 07.02.2007 14:03

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:52.